モナドは相変わらずわからないががんばってるよ。
以下の3つは全て同じ意味。a.txtをb.txtにコピーし"OK"を出力
$ runghc -e 'main=readFile "a.txt">>= \s ->writeFile "b.txt" s>>putStrLn "OK"' OK $ runghc -e 'main=readFile "a.txt">>= writeFile "b.txt">>putStrLn "OK"' OK $ runghc -e 'main=do{s<-readFile "a.txt";writeFile "b.txt" s;putStrLn "OK"}' OK $
そうか、>>=と>>は中置演算子だったんだ
Prelude> (>>=) (readFile "a.txt") putStr foo bar buzz Prelude> readFile "a.txt" >>= putStr foo bar buzz Prelude> putStrLn "foo" >> putStrLn "buzz" foo buzz Prelude> (>>) (putStrLn "foo") (putStrLn "buzz") foo buzz Prelude> (>>) ((>>=) (readFile "a.txt") putStr) (putStrLn "buzz") foo bar buzz buzz
文字xをyに置換する
Prelude> "abbcxxxxy">>= (\c->if c=='x' then "y" else [c]) "abbcyyyyy"