モナド (プログラミング)
コモナドはモナドの圏論的な双対である。型構築子 W T と2つの演算 extract と extend を持つ。extract の型は W T → T であり、extend の型は (W T → T' ) → W T → W T' であり、以下のコモナド則を満たすとする。
extend extract = id {\displaystyle {\text{extend}}\,\,{\text{extract}}={\text{id}}}
extract ∘ ( extend f ) = f {\displaystyle {\text{extract}}\circ ({\text{extend}}\,f)=f}
( extend f ) ∘ ( extend g ) = extend ( f ∘ ( extend g ) ) {\displaystyle ({\text{extend}}\,f)\circ ({\text{extend}}\,g)={\text{extend}}\,(f\circ ({\text{extend}}\,g))}
他の方法として、fmap と extract と duplicate を使った定義もできる。fmap と extract により W は余基点付き函手となる。duplicate がコモナドを特徴付ける。
研究者により発見されたモナドになる概念を挙げる。
Iteratee
例外処理
グラフィカルユーザインタフェース
プロセス間通信
構文解析器
インタープリタ
正格評価
他の言語で書かれたコードへのインターフェース
二項演算子 bind (>>=) は失敗する可能性のある計算の結果を、もうひとつの失敗する可能性のある計算へ連鎖する。最初の引数が Nothing だった場合は、二番目の引数(関数引数)は無視されて、単に計算全体が失敗する。もし、最初の引数が Just x だった場合は、この値 x は二番目の関数引数に渡されて、この関数の結果として新しい Maybe の値が返される。これは Just な値か失敗かのどちらかになる。
計算の状態に影響を与えずに値を投入する構築子は、Just がすでにそうなっている。
これらを使うことで、上の例は次のように書ける。
さらにdo記法という構文糖衣を使うことで、次のように書くことができる。
この種の操作は頻出なので、Haskellの標準関数(liftM2)が用意されている。これはふたつのモナド的な値(ここでは、ふたつのMaybe)と、その中身(ふたつの数値)を組み合わせる関数(加算)を受け取る関数であり、上の例は次のように書ける。
(上記のdo記法を使ってliftM2の定義を書いてみよう)