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})
code:example
div_ n
| n == 0 = (1, error)
| otherwise = (0, q) -- qは100/nの商
普通のモナドの定義との比較
参考