Haskell の IO モナドと参照透過性の秘密
http://labs.timedia.co.jp/2017/08/haskell-io-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