トップ «前の日記(2006-09-02) 最新 次の日記(2006-09-05)» 月表示 編集

日々の流転


2006-09-04 [長年日記]

λ. IOモナドの実行順序を規定するのは何か?

あたりの話だけど……

(>>)が非可換なモナド*1では a >> bb >> 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アクションを表す単なる値に過ぎないというのが良くわかるのではないかと思う。

もちろん、実際の処理系で使われている定義はもっと巧妙……というか普通は処理系固有の黒魔術になってるけど。

Tags: haskell

*1 本当は(>>=)について言うべきだろうけど面倒なので省略。本質的にはFreyd圏での(f⊗1)∘(1⊗g) ≠ (1⊗g)∘(f⊗1) の話になると思う。

*2 これだとモナド則は厳密には成り立たないけど、まあ単に抽象データ型として扱う分には問題あるまい

λ. 熱力学とガベージコレクション

かねてから、計算機科学者は熱・温度・エネルギーといった熱力学の概念を知っているべきと思っていたので、丁度それらの紹介があった"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>

本日のツッコミ(全2件) [ツッコミを入れる]
ψ のだ (2006-09-26 12:00)

「熱力学とガベージコレクション」の中の "equipartition theorem" は「エネルギー等分配則」などと訳されます.「等分配 エネルギー」でググってみてください."degeneracy" は「縮退」です.<br>中身は微妙だと思いますが...

ψ さかい (2006-09-26 20:33)

ありがとうございます。<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>確かに。