北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

図でわかる(?)モナド おまけ: 図からコードを書く

最後に出した例ですが、

module Main where

main :: IO ()
main = getLine >>= putStrLn . reverse

モナドで悟りをひらきたいのなら - 図でわかる(?)モナド

さきほどのエントリの図が全部わかれば、以下のような図も書けますね。reverseをfmapで持ち上げて橋を架け、落ちているputStrの左端を>>=で吊るし上げます。この図でできるIO StringからIO ()への関数は、モナドの性質(≒可換性)から、ありがたいことに最初の図でできる関数と同じになります。

この図から、以下のコードが書けます。

module Main where

main :: IO ()
main = fmap reverse getLine >>= putStrLn

Haskellでは関数間の型があうようにコーディングをすることが多いと思いますが、モナドが関数の型に及ぼす効果をダイアグラム上で視覚的に理解すれば、関数、すなわち矢印の組み合わせを考える時のバリエーションが増え、より柔軟にコーディングできるようになります。

ダイアグラムって、本当にありがたいものですね!

10/31 追記 層圏トポス勉強会もやってるよ!

主催者より、モナドで悟りを得たかったら、層圏トポス勉強会にgoとのことです。入会はこちらのGoogle groupsからどうぞ。