generated at
Errorモナドを圏論的観点から見る
Kleisli Triple(E,\eta,(-)^*)を考える
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モナド
EAAと1点集合\{\mathrm{error}\}の直和

プログラム
p\_:\mathbb{N}\to\{(0,n)|n\in\mathbb{N}\}\cup\{1,\mathrm{error}\}(=E\mathbb{N})

example
div_ n | n == 0 = (1, error) | otherwise = (0, q) -- qは100/nの商


普通のモナドの定義との比較

参考