クライスリ圏
圏 C 上のモナド <T,η,μ> が与えられたとすると、クライスリトリプルの拡張演算子 _はモナドを用いて定義することができる。具体的には、任意の射 f : X → T Y に対して、_ を
f ∗ = μ Y ∘ T f . {\displaystyle f^{*}=\mu _{Y}\circ Tf.}
とする。よって、モナド <T,η,μ> を与えることはクライスリトリプル (T,η, _) を与えることと同値である。
プログラミングの教則として、引数と返り値をもつことからプログラム(program)とは数学の関数、すなわち集合写像(mapping)であると教えられることがある。 しかしながらこの喩えは
入出力等をもたらすプログラム
例外を返すプログラム
引数に対して値を返さない(停止しない)プログラム
同じ引数でも返り値が異なる可能性のあるプログラム
などを説明することができない。つまり、プログラムは集合写像ではない(a program is NOT a mapping)。 プログラム(program)の数学的モデルを見つけ出す過程において、モッジは圏論と表示的意味論の観点からプログラムは圏の射、型は圏の対象とみなすことができ、さらに直感的解釈として、関数が値を取り値を返すものであるのに対しプログラムが値を取り計算した 値を返す、すなわち引数の型と返り値の型の間にはなにか違いがあり単純な射の合成ができない、と考えた。
集合写像(関数):値 → 値
プログラム :値 → "計算した" 値
モッジはこのような射としてのプログラムの数学的モデルとしてクライスリ圏(Kleisli category)の射が妥当であると主張し実際に副作用、例外処理、非決定計算などの効果をうまくクライスリ圏の枠組みで統一的に定式化できることを示した。その結果として伝統的な表示的意味論においては欠如していたモジュール性を付与することに成功した。