前回の記事 では,モナドについて説明しました。ここでは,モナドの具体例として,計算機科学でしばしば登場する「リストモナド」と「状態モナド」について,図式を用いて紹介します。
#1:
圏の定義と具体例
#2:
関手と自然変換
#3:
垂直合成と水平合成
#4:
モノイダル圏
#5:
モナドとは自己関手の圏におけるモノイド対象のこと
#6: モナドの例(この記事)
#7:
随伴
#8:
関手を表す線の順序の交換
#9:
普遍射と随伴・極限・カン拡張
#10:
ホム関手のストリング図(前編)
#11:
ホム関手のストリング図(後編)
#12:
米田の補題
番外編1:
視覚的に理解するクライスリトリプルとモナドの同値性
番外編2:
線形代数の圏論的な性質(?)を圏論なしで説明する
Haskellなどの関数型プログラミング言語では,>>=
のようなバインド演算がよく用いられます。この演算は各
バインド演算による写像
この写像を暫定的に持ち上げとよぶことにして,各
まず,リストモナド
関手
また,
式
これにより,
積(自然変換)
と定めます。
式
大ざっぱに述べると,各
単位元(自然変換)
と定めます。
式
各
リストモナドがモナドである,つまり結合律と単位律を満たすことを確認しておきます。
結合律を満たすことは,各
結合律
単位律を満たすことは,各
単位律
持ち上げ
なお,各
状態モナド
以降では,各集合
集合
集合
左辺と右辺は同じ
また,
写像
このため,
左辺と右辺は同じ
積(自然変換)
写像
を次の図式で表すことにします。
写像
このとき,
式
直観的には,この左辺は写像
この右辺が,上で述べた
単位元(自然変換)
各
状態モナドがモナドである,つまり結合律と単位律を満たすことを確認しておきます。ここでは概要のみを説明します。
各集合
結合律
これは,
各集合
単位律
このことは,直観的には「くねくねと曲がった線
持ち上げ
リストモナドと状態モナドを,図式を用いて説明しました。詳しい説明は省略しましたが,図式に慣れればきっとこれらのモナドを視覚的にわかりやすく理解できることと思います。