* cat by foldM [#o471dc62] [[foldM:http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Monad.html#v%3AfoldM]]を使って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 by foldM [#c27d28fa] 長さを表すリストをとって、その総和を返す関数を作ってみました。ただし長さなので、負の値があると全体が失敗します。 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> こういう感じの使いかたであってるんでしょうか?