>>325
311じゃないんだが、横から質問させてください。

たとえば整数の二次元配列の1要素に書き込む処理を考えると、
手続き型言語であれば、機械語のレベルで数ステップから十数ステップ程度の
オーバーヘッドで実行できる。1要素の読み出しと大差は無いし、処理時間も定数的です。

で、HaskellのIOArrayへの書き込み処理というのも、「1要素の読み出しと大差の無い時間で
実行できる」ものなのでしょうか?もしYesなら「手続き型言語と同じ」と言えるでしょう。

でも個人的には、おそらくIOArrayの実装とは、書き込んだ状態変化を差分として保持し、
それをハッシュで管理することでオーバヘッドを最小限に押さえているのだと想像しています。
だとすれば、とても読み出し処理と同じオーバヘッドで実行できるはずはありません。
それともHaskellのIOArrayは、素人の想像を超えた(魔法のような)ロジックで
実装されているのでしょうか?それがモナド・マジックとやらなのかなぁ.....。