拡張可能作用 ― モナド変換子に取って代わるもの - shiatsumat/fp-papers GitHub Wiki
このページは、Oleg Kiselyov, Amr Sabry, and Cameron Swords. 2013. Extensible effects: an alternative to monad transformers. In Proceedings of the 2013 ACM SIGPLAN symposium on Haskell (Haskell '13). ACM, New York, NY, USA, 59-70. の日本語訳です。
拡張可能作用 ― モナド変換子に取って代わるもの
オレグ=キセリョフ [email protected]
アムル=サブリ(インディアナ大学、アメリカ合衆国)[email protected]
キャメロン=ソーズ(インディア大学、アメリカ合衆国)[email protected]
概要
私たちは、作用 (effect) の間のやりとり (interaction) について(静的な順序付けなどの)制約を課すこと無しに作用を合成するにはどうすればよいか、という長年の問題を解決するライブラリを設計し、実装する。作用はクライアントと作用ハンドラ(解釈機)の間のやりとりによって生じる。そのやりとりは、プログラム全体で異なっているかもしれないし、実行条件に応じて動的に変わるかもしれない。モナド変換子 (monad transformer) に依存する既存のコードは、少しの変更を加えるだけで、私たちのライブラリを使って、モナドの長いスタックに優る効率性を得るだろう。それに加えて、私たちのライブラリは表現性も優れていて、モナド変換子を使って書いた場合は非効率、面倒、あるいはそもそも記述不可能であったような、実用的なイディオムをも書けるようになる。
私たちのモナド変換子のスタックに対する代替手段は、クライアントとハンドラのコルーチン的な通信のための、単一のモナドである。このモナドの型は来る可能性のあるリクエスト、つまり計算する可能性のある作用を反映している。任意の作用とその任意の組み合わせをサポートするために、リクエストは拡張可能 (extensible) な和型 (union type) の値である。この型は、新たな型を付け足せるだけでなく、なんと型を取り除くこともできる。来る可能性のあるすべてのリクエストからなる和集合を、伸ばしたり、ハンドルの直後に縮めたりする様子は、型自体に反映され、これにより Haskell に型と作用のシステム (type-and-effect system) が生まれる。このライブラリは軽量でありながら、拡張可能な例外処理を他の作用へ一般化し、その作用を型の中で正確に追跡している。
カテゴリと主題の説明 D.3.2[プログラミング言語]言語区分―適用可能(関数型)言語、F.3.3[論理とプログラムの意味]プログラム構成の研究―制御プリミティブ、F.3.3[論理とプログラムの意味]プログラム構成の研究―型構造
キーワード モナド、モナド変換子、作用ハンドラ、オープンな和、型と作用のシステム、作用のやりとり、コルーチン
目次
-
[1. 導入](拡張可能作用 ― モナド変換子に取って代わるもの 1#section1)
-
[2. 拡張可能作用フレームワークのツアー](拡張可能作用 ― モナド変換子に取って代わるもの 2#section2)
-
[3. 拡張可能作用フレームワーク](拡張可能作用 ― モナド変換子に取って代わるもの 3#section3)
-
[3.1 コルーチンとのやりとりとしての読み取り作用](拡張可能作用 ― モナド変換子に取って代わるもの 3#section3-1)
-
[3.2 任意の作用に対するコルーチン](拡張可能作用 ― モナド変換子に取って代わるもの 3#section3-2)
-
[3.3 オープンな和型](拡張可能作用 ― モナド変換子に取って代わるもの 3#section3-3)
-
[3.4 拡張可能作用ライブラリの全体像](拡張可能作用 ― モナド変換子に取って代わるもの 3#section3-4)
-
-
[4. MTL全体をシミュレートする](拡張可能作用 ― モナド変換子に取って代わるもの 4#section4)
-
[4.1 モナディックな作用に対する型クラス](拡張可能作用 ― モナド変換子に取って代わるもの 4#section4-1)
-
[4.2 任意のモナドの持ち上げ](拡張可能作用 ― モナド変換子に取って代わるもの 4#section4-2)
-
[4.3 効率性](拡張可能作用 ― モナド変換子に取って代わるもの 4#section4-3)
-
-
[5. MTLを超越する](拡張可能作用 ― モナド変換子に取って代わるもの 5#section5)
-
[5.1 モナド変換子の意味論は柔軟でない](拡張可能作用 ― モナド変換子に取って代わるもの 5#section5-1)
-
[5.2 作用の交替](拡張可能作用 ― モナド変換子に取って代わるもの 5#section5-2)
-
[5.3 モナド変換子の限界を克服する](拡張可能作用 ― モナド変換子に取って代わるもの 5#section5-3)
-
[5.4 制御を用いた非決定論](拡張可能作用 ― モナド変換子に取って代わるもの 5#section5-4)
-
-
[6. 関連研究](拡張可能作用 ― モナド変換子に取って代わるもの 6#section6)
-
[7. 結論](拡張可能作用 ― モナド変換子に取って代わるもの 7#section7)
-
[謝辞](拡張可能作用 ― モナド変換子に取って代わるもの 8#section8)
-
[参照](拡張可能作用 ― モナド変換子に取って代わるもの 9#section9)
-
[図1](拡張可能作用 ― モナド変換子に取って代わるもの 2#fig1)
-
[図2](拡張可能作用 ― モナド変換子に取って代わるもの 3#fig2)
-
[付録に行く](拡張可能作用 ― モナド変換子に取って代わるもの 付録)