tryは関手にはならない
言語仕様はtry/catchとしたが、やはり単独のtryを考えたほうが扱いやすい。が、注意すべきはtryが関手にはなってない点だ。関手ではないが圏論的オペレーター。
他の例:
- eachは、each(f;g) = each(f);each(g) の意味で関手性を持つ。クライスリ埋め込み関手。
- repeatは関手ではなくてトレース。repeat(f) := Tr(∇;f)
- takeは、述語射(述語コマンド)を引数にとって、take(p∧q) = take(p);take(q) は満たす。listクライスリ圏にテスト付きクリーネ圏の構造を導入するのだろう。listよりbagがふさわしそうだ。いまのところベース圏にテスト付きクリーネ構造がない。
- when, case, condは直和構成なので、関手つうよりはモノイド積。
- let(レイフィケーション)は直積の不動点構造。