Listモナド覚書
内包記法(list comprehension)を使わないでモナド的に書いてみる。
import Control.Monad f1 x = if x > 5 then return x else [] f2 x = guard( x > 5 ) >> return x f3 x = guard( even x) >> return x d2 x = return (2 * x) main = do putStrLn $ show $ ([1..10] >>= d2 ) putStrLn $ show $ ([1..10] >>= f1 ) putStrLn $ show $ ([1..10] >>= f2 ) putStrLn $ show $ ([1..10] >>= f2 >>= f3 ) putStrLn $ show $ ([1..10] >>= f2 >>= f3 >>= d2 )
内包記法がネストすると大変なことになるのでわかりやすくていいね。

Debian QA
Facebook (taniguchi.takaki)
Twitter (@takaki_t)