拡張可能作用 ― モナド変換子に取って代わるもの - 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)

  • [付録に行く](拡張可能作用 ― モナド変換子に取って代わるもの 付録)