モナドの例がパイプそのまんま
ふつけるのMaybeモナドの例*1とUnixパイプが同じ形だなという発見。
lookup "database" config >>= lookup "encoding" -- Maybeモナドの例 grep "database" config | grep "encoding" -- Unix系のコマンドラインでgrepをパイプでつないだもの
">>="と"|"がそのまま対応している。下手したらモナドをパイプとして理解しそうで怖い。
その次のページの例は、returnをつかって上と同じことをしている。これもコマンドラインに対応物が。
return config >>= lookup "database" >>= lookup "encoding" cat config | grep "database" | grep "encoding"
"return"と"cat"が対応している。
Haskell | Unix |
---|---|
>>= | | |
return | cat |
モナド | ? |
モナドそのものに対応するのは、あるとすればなんだろう?
returnは、モナド化する関数と思ってるので、catは何化してるかなと。
catは標準出力に書く、grepはパイプ経由で標準出力から読む。
と考えると、モナドに対応するものはstdioかな。
Haskell | Unix |
---|---|
>>= | | |
return | cat |
モナド | stdio |