Haskellが副作用をモナドで扱う件
親切な(Haskellerの?)方にコメント欄で (>>=)
について教えていただいたので眺めてみた.
というのも,個人的に「Haskellの,副作用をモナドとして扱う手法は,実質的に『副作用アリの領域』を分離しているに過ぎない; Haskellは異質な命令型言語を内部に抱えている」という想像を作業仮説として持っていて,見たらちょっと考えが深まるかもと思ったんだが,どうもそう楽ではないようだ.
Prelude.hs
ではHugsでのクラス Maybe
, List
, IO
に対するオーバーロードの実体が分かったのだが,Maybe
と List
は副作用とは無関係で,IO
では primBindIO
という組み込み関数に丸投げ.primBindIO
の実体は src/iomonad.c
にあったがどうもよく分からん.G-machineを知る必要アリ?
GHCの Base.lhs
ではクラス List
に対するオーバーロードの実体だけ.ライブラリリファレンスによればクラス Monad
に属する型はいくつもあるんだが,分散しているのか.