Errorモナドを圏論的観点から見る
EA = \{(0,a)|a\in A\}\cup\{1,\mathrm{error}\}
\eta_A(x)=(0,x)
f^*(x)=\left\{\begin{array}{ll}(0, f(y)) & (x=(0, y)) \\ (1, \mathrm { error }) & (x=(1, \mathrm { error }))\end{array}\right.
記号の説明
Aは型
ex. Int
, String
, ..
EはErrorモナド
EAはAと1点集合\{\mathrm{error}\}の直和
プログラム
p\_:\mathbb{N}\to\{(0,n)|n\in\mathbb{N}\}\cup\{1,\mathrm{error}\}(=E\mathbb{N})
examplediv_ n
| n == 0 = (1, error)
| otherwise = (0, q) -- qは100/nの商
普通のモナドの定義との比較
参考