Haskell の IO モナドと参照透過性の秘密http://labs.timedia.co.jp/2017/08/haskell-io-monad.html
これ昔読んだときは理解しづらかったけど今はスッと入ってくる
ただこれは昔からの疑問なんだけど、現実的にはIOモナドの簡約には一定の時間がかかるわけで、その間にも外界(RealWorld)の状態(State)は変化しているはずなのに、このIOモナドの解釈(IO a = State RealWorld a)だと簡約は完全に時間0で完了するか、あるいは簡約中は一切外界の状態は変化してはいけないので、やはりそこが気になる
GHCが内部でIOモナドをどう機械語列に落としているのかは知らないけど、この理由からやはり自分はIOモナドをState RealWorldと解釈するのではなく、単に機械語塊のリストと解釈するのがしっくりくるなぁと前から思っている(LLVM.IRBuilder.Monadのイメージ)
https://hackage.haskell.org/package/llvm-hs-pure-9.0.0/docs/LLVM-IRBuilder-Monad.html
様々な目的に使える、日本の汎用マストドンサーバーです。安定した利用環境と、多数の独自機能を提供しています。
GHCが内部でIOモナドをどう機械語列に落としているのかは知らないけど、この理由からやはり自分はIOモナドをState RealWorldと解釈するのではなく、単に機械語塊のリストと解釈するのがしっくりくるなぁと前から思っている(LLVM.IRBuilder.Monadのイメージ)
https://hackage.haskell.org/package/llvm-hs-pure-9.0.0/docs/LLVM-IRBuilder-Monad.html