2006-09-04 [長年日記]
λ. IOモナドの実行順序を規定するのは何か?
- sshi.Continual - ふつける勉強会 10回目
- lethevert is a programmer - Haskell : モナドの実行順序は何によって規定されているのだろうか?
- haskellのある暮らし - モナドの実行順序はいかにして既定されるか
- lethevert is a programmer - Haskell : モナドの実行順序
あたりの話だけど……
(>>)
が非可換なモナド*1では a >> b
と b >> a
は異なる値であることがあり、必然的に順序の概念が生まれる。そして、IOモナドは(>>)
が非可換になるように定義されたモナドであり、Haskellの処理系はmain
という名前のIOモナドの値を、その順序に従った一連のIOアクションに変換する。
ただこれだけの話。 つまり、IOモナドの実行順序を規定しているのは、IOモナドが持っている非可換性である。 評価順だとか正格性とかみたいなややこしい話は全く本質的ではない。
IOモナドの具体的定義
で、これらの要求を満たすようにIOモナドを具体的にどう定義するかだけど……そんなのはまあどうとでもなる。例えばこんな感じの単純なものでも構わない*2。
data IO' a = Return a | forall b. Bind (IO' b) (b -> IO' a) | PutChar Char instance Monad IO' where (>>=) = Bind return = Return putChar :: Char -> IO' () putChar = PutChar
というか、こういう単純な表現にしてやると、IOモナドの値はIOアクションを表す単なる値に過ぎないというのが良くわかるのではないかと思う。
もちろん、実際の処理系で使われている定義はもっと巧妙……というか普通は処理系固有の黒魔術になってるけど。
λ. 熱力学とガベージコレクション
かねてから、計算機科学者は熱・温度・エネルギーといった熱力学の概念を知っているべきと思っていたので、丁度それらの紹介があった"Thermodynamics and Garbage Collection"(.html, .ps.gz)*1を、「熱力学とガベージコレクション」でこっそり翻訳中。まあ、GCへの適用についてはかなり眉に唾を付けた方が良いと思うが。
そういえば、熱力学は20041220#p01ごろには武藤先生のブームだったけど、これはもう終わってしまったかな。
追記 (2006-09-09)
resolutionは分解能だという指摘をtakotとまつもとさんから受けたので、そのように修正。お二人に感謝。
*1 ちなみに、この論文を知ったのは<URL:http://lambda-the-ultimate.org/node/1248#comment-13774> で
「熱力学とガベージコレクション」の中の "equipartition theorem" は「エネルギー等分配則」などと訳されます.「等分配 エネルギー」でググってみてください."degeneracy" は「縮退」です.<br>中身は微妙だと思いますが...
ありがとうございます。<br><br>> "equipartition theorem" は「エネルギー等分配則」などと訳されます.<br>「equipartition law」を「エネルギー等分配則」と訳しているのは見た事があったのですが、theoremを「〜則」と訳してよいのか悩んでいました。<br><br>> "degeneracy" は「縮退」です. <br>こんなピッタリの訳があったのですね。<br># 以前から「We cannot have cartesian closure, the fixpoint property and coproducts in a non degenerate category.」といった文を訳すときに悩んでたのですが、今度からは「縮退」を使わせてもらおうと思います。<br><br>> 中身は微妙だと思いますが...<br>確かに。