foldMを使ってcat。引数に与えられたファイルを結合して標準出力に流し込みます。
import Control.Monad(foldM) import System.Environment(getArgs) -- readFile :: FilePath -> IO String -- getArgs :: IO [String] -- foldM :: Monad m => (a -> b -> m a) -> a -> [b] -> m a freadAppend :: String -> FilePath -> IO String freadAppend x f = do str <- readFile f return $ x++str main :: IO () main = do files <- getArgs str <- foldM freadAppend "" files putStrLn str
長さを表すリストをとって、その総和を返す関数を作ってみました。ただし長さなので、負の値があると全体が失敗します。
sumOfLen = foldM add 0 where add a b = if b < 0 then Nothing else Just $ a + b
*Main> sumOfLen [3,4,5] Just 12 *Main> sumOfLen [3,-4,5] Nothing *Main>
こういう感じの使いかたであってるんでしょうか?