IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

型だけでReaderモナドを理解しようと試みる

Reader Monad は 昔 Environment Monad と呼ばれていたそうです。

Control.Monad.Reader

ということで(!?)、設定ファイルを使う体で例を作ってみました。

設定ファイルを使わないと、

doJob123' = \x -> doJob3' x $ doJob2' x $ doJob1' x ()

となります。ここでいうxが設定情報に相当する部分なのですが、コード上ずっと持ち回る必要があり、コードが読みにくくなります。

Readerモナドをつかうと、

doJobR123 = doJobR1 () >>= doJobR2 >>= doJobR3

となり、設定情報の持ち回りコードが隠蔽化されます。

Grokking Reader Monad without implementation