>>456

> 何を明示?何が持ち回れば?
蓄積引数使って末尾呼び再帰にする場合を考えればわかる。

> 型がA->MBなのは不純関数と言ってる?
そうではない。それだけではそのmは単にbを取る型構築子に過ぎない。
IO bの実体はRealWorld -> (b, RealWorld)という純粋な関数だ。
だが、このRealWorldは隠蔽されており、IOの外側からはアクセスできない。
隠蔽された引数の受け渡しと処理を裏で行い隠蔽し続けるのがモナドの役割。

> この後とも関係するが、IOモナドは手続きっぽいが、
> リストは手続きではないよね。

モナドはいわゆる手続きと同じ構造を持つが、他のものと同じ構造を持つことも妨げられない。

> リストをなぜわざわざ非決定性なんて呼ぶの?値が複数あるだけだね?

数学的な意味での関数は複数の値を直接に返すことはできない。
そこで、A型の値を複数同時に返したければ冪集合P(A)型の値をひとつ返す、と考える。
明示的にP(A)型を扱う計算を書いてもいいのだが、余りに面倒なので
P(A)に対する計算をAに対する計算から組み立てる構造を提供するのが
リストモナドの役割だ。

> 非決定性計算をなぜ副作用と呼ぶの?純関数は非決定的ではないから、
> というなら、「副作用」って「不純」と同義に使っているのかな?

そういう流儀があるというだけの話。
CS研究者でないなら、クライスリ圏の射なので〜云々、とか気にしてもしょうがない。