モナドの例がパイプそのまんま

ふつけるのMaybeモナドの例*1Unixパイプが同じ形だなという発見。

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

UnixコマンドラインってIOモナド*2
あと、モナド外しは">"(リダイレクト)かな。

*1:p266

*2:たぶん違う