このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

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(レイフィケーション)は直積の不動点構造。