圏論勉強会 @ ワークスアプリケーションズのモナドの説明をもとにまとめた

モナドの定義

におけるモナドとは、

  • 自己関手
  • 自然変換
  • 自然変換 からなり、等式
  • が成り立つものである。

をモナドの単位元をモナドの積などと呼ぶ。

理論計算機科学でのモナド

型と関数の圏とした場合、計算作用自己関手によって表現する。 この計算作用の表示がであり、計算の表示が射ということになる。(クライスリ圏クライスリ射)

計算作用

モナドで扱うような計算作用

  • 値を返さない場合がある(partiality)
  • 複数の計算結果がある(nondeterminism)
  • 副作用がある(side-effects)
  • エラーが発生する(exception)
  • 継続(計算機科学)を返す(continuations)
元記事へのリンク

計算を単純に合成すると、計算作用が2回発生するため、出力がという型になってしまう。例えば、副作用を表しているならば、は「副作用が2度発生する」という計算作用を表す。

graph LR
  A --f--> 2["T(B)"] --g--> 3["T²(C)"]

しかし、「副作用のある計算」をいくつ合成しても、単に「副作用のある計算」と認識することが多い。そこで、自然変換をつかって畳み込みをすることで、複数の副作用をまとめることにする。この計算作用の畳み込みは結合的である。

graph LR
  A --f--> 2["T(B)"] --g--> 3["T²(C)"] --μ--> 4["T(C)"]

また、「何もしない」という計算を表現する必要がある。これは自然変換で表すことにする。この「何もしない」計算は単位的である。

do構文とモナド

圏論がわからない場合は、モナドは単にdo構文だとおもって捉えるのが良さそう。

モナドの資料