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

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

トランザクション関手

f : A → B :+ E に対して try(f) : A → B+E :+ 0 というtryの定式をもとに、モノイダルスタンピングモナドトランザクション(transaction)を関手として定式化できた。

射のプロファイルが問題で、f:A → M×B :+ E という射を次のプロファイルに変換する:

  • tranz(f):A+1 → M×B+1 :+ 0

failed: E→M×1 という射は、!E; (eはモノイドの単位、1は1の唯一元)として、failedによる例外ハンドリングを取り付けることがtranz関手になる。tranz関手の域は、基礎圏を例外とモノイドで拡張した圏。tranz関手の余域は、例外が起きない射の部分圏になる。

関手なので、tranz(f;g) = tranz(f);tranz(g)。ベキ等関手 tranz(tranz(f)) になっている。

この方法で、色々な例外処理を定義できそう。そんな例が処理を組み込みにするのはなんか変だ。やっぱり関手定義機能が必要なのか。