[復習] \((\mathbb{C}, \otimes, I, \alpha, \lambda, \rho)\) がモノイダル圏とは、
[復習] \((\mathbb{C}, \otimes, I, \alpha, \lambda, \rho)\) がモノイダル圏とは、
[復習] モノイダル圏\(\mathbb{C}\)において、\((M, e, m)\) がモノイドとは、
[復習] モノイダル圏\(\mathbb{C}\)において、\((M, e, m)\) がモノイドとは、
\(m \circ ( m \otimes \mathrm{id} ) \circ \alpha = m \circ ( \mathrm{id} \otimes m )\)
\(\rho =m \circ ( \mathrm{id} \otimes e )\)
[復習]以下のように読み替えるとよい。
射\(f : M \to M'\)がモノイド\((M, e, m)\)と\((M', e', m')\)の間の準同型とは、
直積を \(\otimes\) としたモノイダル圏のモノイド準同型は、通常の意味のモノイド準同型となる。
morph :: forall a . m a -> n a
morph . return = return
morph . (f >=> g) = morph . f >=> morph . g
lift :: Monad m => m a -> t m a
lift . return = return
lift (m >>= f) = lift m >>= (lift . f)
morph
の定義と同値かモノイドとモノイド準同型は圏を成す。
モノイド変換子 \((T, \mathrm{lift})\)とは、
ただし、 \(\mathrm{In} : \mathrm{Mon}(\mathbb{C})_0 \to \mathrm{Mon}(\mathbb{C})\) は埋め込み関手とする。
関手圏 \(\mathbb{C}^\mathbb{C}\) において、関手の合成・自然変換の水平合成を\(\otimes\) ととったモノイダル圏におけるモノイド変換子。
return
とbind
を保つcatchError :: m a -> (e -> m a) -> m a
モノイダル圏 \(\mathbb{C}\) において \(op : HM \to M\) が H-operation であるとは、
catchError
ほとんどの操作はH-operationsを元に導出できる。
catchError = curry catchError'
\(\mathrm{op}^M : HM \to M\)をH-operation、\(h : M \to N\)をモノイド準同型とする。\(\mathrm{op}^N : HN \to N\) が以下を満たすとき、\(\mathrm{op}^M\)の\(h\)に沿った持ち上げであるという。
変換子 | 共変 | 関手的 | モノイダル | |
---|---|---|---|---|
H-operation | ||||
\(\tiny{(S \otimes M) \otimes F \to M}\) | M | |||
first-order | C | C M | ||
代数的 | A | A | A C | A C M |
StateT
, WriterT
ListT
, ErrorT
ContT
get
, put
, trace
, throw
, abort
, callcc
local
, handle
collect
H-operation \(\mathrm{op} : HM \to M\) がfirst-orderであるとは、
H-operation \(\mathrm{op} : HM \to M\) が代数的であるとは、
代数的なoperation \(\mathrm{op} : S \otimes M \to M\) と \(S \to M\) という形のH-operationは一対一で対応している。
\(\mathrm{op}^M : S \otimes M \to M\) をalgebraic operation、 \(h : M \to N\) をモノイド変換子とすると、\(\mathrm{op}^N : S \otimes N \to N\) なる algebraic operation で \(\mathrm{op}^M\) の \(h\) に沿った持ち上げとなっているものが唯一存在する。