トップ «前の日記(2008-04-10) 最新 次の日記(2008-04-12)» 月表示 編集

日々の流転


2008-04-11 [長年日記]

λ. coarbitrary と双対を表す“co-”の由来

shelarcyさんの連載「本物のプログラマはHaskellを使う」の第18回 QuickCheckを使ってできることとできないことっで、coarbitraryについて以下のように説明されていた。

coarbitraryとは何でしょうか?「coarbitraryメソッドが第1引数として型変数aの値を取って最終的に型変数b(またはc)の値を返す」という関係と「arbitraryクラスのインスタンスであるa -> bが型変数aの値を取って型変数bの値を返す」という関係は同じものです。つまり,「ある部分から見て*と共通の関係を持つもの」を「co*」と呼ぶのです。関係が逆になる場合には「contra*」と呼びます。この関係を覚えておけば,coやcontraといった接頭辞が付く名前を見たときに戸惑わずに済むでしょう。

けど、coarbitraryの“co-”ってその“co-”なんでしょうか(ソース希望)。

私は、arbitrary が乱数から値を生成するgeneratorなのに対して、coarbitraryは「引数を使って乱数に作用する(ようgeneratorを変換する)」というある種の双対的な機能を持っているからだと思っていました。 本人らに聞いたわけではないので、あくまで憶測ですが。

あと、双対を表す“co-”を通常の“co-”の意味から説明しようとする のはやめておいた方が良いでしょう。 categoriesメーリングリストでの話<URL:http://www.mta.ca/~cat-dist/catlist/1999/co-prefix>を読むと、ややこしいことになってるのが分かると思います。

λ. 定期を忘れた

朝、定期を家に忘れて出てきてしまった。 途中で気づいたのだけど、そこから戻ると40分くらいロスしてしまうこともあり、そのまま切符を買って行った。 色々合計して約1500円の損失。 しょぼーん。

反省点:

  • JRは切符を買ってしまったけど、Suica定期券を再発行してもらうという手もあった。手数料500円とデポジット500円をとられるが、後で忘れたSuica定期券を返還してデポジット500円を取り返せば、500円の損失だけで済んだはず。
  • バスは現金で払ってしまったけど、その場で運転手さんからバスカードを買えばよかった。バスカードの割引率(15%)分だけもったいないことをした。