ITコンサルの日常

ITコンサル会社に勤務する普通のITエンジニアの日常です。

リストモナドその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のパイプみたいなものなのか?と、誤った理解をしてみる。