リストモナドその2
リストモナドは、パズル解くのに有用そうなのでがんばってみる。
以前Maybeモナドでやった、「文字列のリストからbで始まってcで終わる要素を取り出してみる。」ですが、リストモナドでやったらうまくいったので書いてみる。
main = print $ ["aaa", "bbb", "ccc", "bbc"] >>= startsWithB >>= endsWithC startsWithB :: String -> [String] startsWithB xs = if (head xs) == 'b' then [xs] else [] endsWithC :: String -> [String] endsWithC xs = if (head $ reverse xs) == 'c' then [xs] else []
結果はこう。
["bbc"]
おお!なんかでけた。
前回みたいに、"bbb"が先にヒットしたから'c'で終わらなくて結果なしっていう、マヌケな結果にもならなかった。
これって、
cat file | grep "^b" | grep "c$"
みたいな感じで良いですね!
そう考えると、モナドってUNIXのパイプみたいなものなのか?と、誤った理解をしてみる。