モナドは、部分関数、非決定性関数、例外(エラー)、コレクション・データ型など、純粋関数計算の不純な(?)拡張を記述するために使えます。なかでも分かりやすいのは、副作用への応用でしょう。ここで言う副作用とは、大域変数への代入、ファイルIO、データベースへのアクセス、画面描画(グラフィックス)、状態を持つ計算などです。 モナドを圏論的に定式化して、その双対を取るとコモナドという概念になります。モナドに比べてコモナドは地味で注目される機会が少ないのですが、コモナドも純粋関数計算を拡張する手段を与えます。 実際には、副作用を表現するモナドと一緒に、たいていはコモナドも出てきているのですが、ちょっと影が薄いんですよね。ここでは、読み取り専用大域変数(イミュータブルな環境)への参照がコモナドになっていることを紹介します。 大域変数の参照 大域変数への代入(書き込み)は、モノイドのスタンピングモナドで記