この直観的な記法はどのように形式化できるだろうか？このためには各入出力アクションに対して、いくつかの基本的な操作を実行できる必要がある。
形式的定義.
三つ組.
三つ組は以下の要素からなる。
モナド則.
公理を do 記法で表現することもできる。
ふたつの定式化は以下の関係を持つ。
加法的モナド.
構文糖衣: do記法.
を変換した結果は以下となる。
よって、以下のような変形が行われて、それぞれの式はすべて等価である。
モナド的な汎用関数.
他の例.
恒等モナド.
もっとも単純なモナドは恒等モナドであり、値になんの情報も付加しない。
圏論的な見方をすると、恒等モナドは恒等函手の間の随伴から得られる。
コレクション.
リストや集合や多重集合といった、おなじみのコレクション型にもモナドであるものがある。リストの場合の定義は次のようになる。
圏論的な見方をすると、コレクションモナドは集合の圏とモノイドの圏の間のと忘却函手の随伴から作られる。
状態モナド.
今までに見たモナドと違い、状態の型という型引数を取ることに注意しよう。モナドの演算は次のように定義される。
状態を操作する関数を挙げる。
初期状態を指定して状態モナドを実行する関数。
状態モナドのdoブロック内の計算は状態の確認や更新を行うことができる。
である。
圏論的な見方では、状態モナドはデカルト閉圏の定義に現れる積函手と指数函手の随伴から作られる。
環境モナド.
で定義される。
環境を操作する関数として
Writerモナド.
モナド演算は
モナドの値を返す関数の例を挙げる。
最後に数学関数のパイプラインにデバッグ情報(デバッグ情報の配列は結合されて、値と一緒に返される)を追加する例を挙げる。
継続モナド.
である。
関数は次で定義できる。
他の例.
研究者により発見されたモナドになる概念を挙げる。
自由モナド.
自由モナドは自由モノイドと似ていて、直観的には、使う型に依存せずにモナド則(またはモノイド則)を満たすようにできる汎用の構造である。
コモナド.
ふたつの定式化の関係は
で与えられる。
積コモナド.
で定める。
関数コモナド.
余状態コモナド.
で定義される。
きゃんち
襁褓
世界でいちばん熱い夏
調はイ長調。
解説.
ベスト・アルバムへの収録.