モナドで躓いて以来、ちょっとご無沙汰していたhaskellだが、ちょっとまとまった時間ができたので、この週末でじっくり考えてみた。
- http://d.hatena.ne.jp/m-hiyama/20060419/1145432492
- http://haskell.g.hatena.ne.jp/taninsw/20060624/p1
- http://haskell.g.hatena.ne.jp/nobsun/20060907/monadicIO
- http://blog.livedoor.jp/dankogai/archives/50462995.html
モナドだけに、読むたび必ず睡魔に襲われる(参照透明性確保!)でも理解度はちょっぴり向上してるっぽい(つまり副作用)。
檜山正幸のキマイラ飼育記はjavascriptを例にして、純関数にすること(参照透明性の確保?)と型を揃えることが重要っぽいあたりが理解できた。
で、HaHaHa!では思考をもうチョイ広げて、とりまく環境の変化ということに思いをめぐらせればいいということを理解した。特に図がわかりやすくて、かなり理解が進んだと思う。
で、それから、実際にperlの例を見るとを~とか思う。
変数の代入をIOと考えればtieって参照透明性を確保しつつ、副作用を発生させることができるのね。この場合にいわゆるモナド則は成り立つのかなと考えてみたけど、なんとなく成り立つのかなと思ったり。
と、ここらへんまで理解した気になって、再度ふつうのhaskellを。
なんとなくわかってキテルっぽいが、じゃぁ、MaybeモナドとかListモナドって何なのヨっていうか、モナドって一体何さ?っていうあたりがわからなくなってきた。さらにperlのtieなんかで実装できるってことは、モナド則っていうのは結局なんなのってのがよくわからん。
ふつうのhaskellに
モナドを定義の観点からみるならばモナド則がすべて
とあるように、モナド則を感覚で理解しなければならんのかな。
ほんとうにモナドを理解するには、モナドを使ったコードを経験することが最良 の方法です。
というわけで、コードを書こう。