関数型プログラミングでは、モナド トランスフォーマーは、モナドを引数として受け取り、結果としてモナドを返す
型コンストラクタです。
モナド トランスフォーマーは、状態、例外処理、I/Oなど、モナドによってカプセル化された機能をモジュール方式で構成するために使用できます。通常、モナド トランスフォーマーは既存のモナドを一般化することによって作成されます。結果として得られるモナド トランスフォーマーを恒等モナドに適用すると、元のモナドと同等のモナドが生成されます (必要なボックス化とアンボックス化は無視されます)。
意味
モナドトランスフォーマーは以下で構成されます:
- 種類
tの型コンストラクタ (* -> *) -> * -> *
- モナド演算
returnおよびbind(または同等の定式化)は、モナド法則を満たすモナドでt mあるすべてのものに対して成り立ちます。m
- 追加の演算 は
lift :: m a -> t m a、以下の法則を満たす: [1] (以下の表記は`bind`中置適用を示す):
lift . return = return
lift (m `bind` k) = (lift m) `bind` (lift . k)
例
任意のモナド が与えられた場合、オプションモナド変換器( はオプション型を表す) は次のように定義されます。




任意のモナドが与えられた場合、例外モナド変換器(Eは例外の型)は次のように定義されます。



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



任意のモナドが与えられた場合、状態モナド変換器(Sは状態型)は次のように定義されます。



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




任意のモナド が与えられると、継続モナド変換器は任意の型R を型 の関数にマッピングします。ここで、Rは継続の結果の型です。これは次のように定義されます。



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


参照
参考文献
- ^ Liang, Sheng; Hudak, Paul; Jones, Mark (1995). 「モナドトランスフォーマーとモジュラーインタープリター」(PDF)。プログラミング言語の原理に関する第22回ACM SIGPLAN-SIGACTシンポジウムの議事録。ニューヨーク、NY: ACM。pp. 333–343。doi : 10.1145 /199448.199528。
外部リンク
Wikibook Haskellには、モナド変換子に関するページがあります。
- モナド変換子と関連概念に関する文献のいくつかを簡単にレビューした、非常に技術的なブログ投稿。カテゴリ理論的処理に重点を置いています。