cat by foldM †

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? by foldM &dagger;

長さを表すリストをとって、その総和を返す関数を作ってみました。ただし長さなので、負の値があると全体が失敗します。

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>

こういう感じの使いかたであってるんでしょうか?


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-11-27 (火) 23:39:12 (5995d)