モナド変換器

関数型プログラミングではモナド トランスフォーマーは、モナドを引数として受け取り、結果としてモナドを返す型コンストラクタです。

モナド変換子は、状態、例外処理、I/Oなど、モナドによってカプセル化された機能をモジュール的に組み合わせるために使用できます。通常、モナド変換子は既存のモナドを一般化することで作成されます。得られたモナド変換子を恒等モナドに適用すると、元のモナドと等価なモナドが生成されます(必要なボックス化とアンボックス化は無視されます)。

意味

モナドトランスフォーマーは以下から構成されます:

  1. 種類t型コンストラクタ (* -> *) -> * -> *
  2. モナド演算returnおよびbind(または同等の定式化)は、モナド法則を満たすモナドでt mあるすべてのm
  3. 追加の演算 はlift :: m a -> t m a、以下の法則を満たす: [1] (以下の表記は`bind`中置適用を示す):
    1. lift . return = return
    2. lift (m `bind` k) = (lift m) `bind` (lift . k)

オプションモナドトランスフォーマー

任意のモナド が与えられた場合、オプション モナド トランスフォーマー( はオプション型を表します) は次のように定義されます。

例外モナド変換子

任意のモナドが与えられた場合、例外モナドトランスフォーマーEは例外の型)は次のように定義されます。

リーダーモナドトランスフォーマー

任意の モナド が与えられた場合、リーダー モナド トランスフォーマー( Eは環境型) は次のように定義されます。

状態モナド変換器

任意の モナド が与えられた場合、状態モナド トランスフォーマー( Sは状態型) は次のように定義されます。

ライターモナドトランスフォーマー

任意のモナド が与えられたとき、ライターモナド変換器( Wには単位元 を持つモノイド演算が与えられている) は次のように定義されます。

継続モナド変換器

任意のモナド が与えられたとき、継続モナド変換子は任意の型Rを型 の関数に写像します。ここでRは継続の結果型です。これは次のように定義されます。

モナド変換は通常は可換ではないことに注意してください。たとえば、状態トランスフォーマーをオプション モナドに適用すると、型(失敗して最終状態を生成しない可能性がある計算) が生成されますが、逆の変換では型(最終状態とオプションの戻り値を生成する計算) が生成されます。

参照

参考文献

  1. ^ Liang, Sheng; Hudak, Paul; Jones, Mark (1995). 「モナド変換子とモジュラーインタプリタ」(PDF) .第22回ACM SIGPLAN-SIGACTシンポジウム「プログラミング言語の原理」議事録. ニューヨーク: ACM. pp.  333– 343. doi : 10.1145/199448.199528 .
  • モナド変換子と関連概念に関する文献を、カテゴリカル理論的な扱いに焦点を当てて簡単にレビューしたブログ記事
Retrieved from "https://en.wikipedia.org/w/index.php?title=Monad_transformer&oldid=1317810155"