IOモナドの実装

昨日がんばってIOモナドの実装がどうなってるのか考察したので、答えを見た

http://itpro.nikkeibp.co.jp/article/COLUMN/20070206/260872/
から参考文献をたどって
http://homepages.inf.ed.ac.uk/wadler/topics/monads.html#imperative

を読んでみたところ、昨日実装したのは継続を使ったIOらしい。IOモナドはもっと効率的に実装できて、それはほとんどStateモナドと同じだけどStateを更新するところを評価したところで、副作用のあるCの関数を呼ぶという実装で正しく動作することをモナドが保障してくれてるようだ。継続のほうとモナドのほうは昨日実装したように相互にエミュレートできる。

NiseIOはIOモナドを継続を使って実装し、executeNiseIOは継続をIOモナドを使って実装したということになってそうだ。

次はHaskellでProject Eulerの問題を一問解いてみるかな。291とか適当実装では終わらなかったからちょっと考察して実装してみよう。