#... Searching now ...
#QuickCheck と QuickCheck2 で意味合いが違う...
#ポインタはなくて、Ruby に QuickCheck もどきを実装したって話を John Hughes と Koen Claessen に口頭で言ったときに
#なんで「coarbitrary って名前なのさ、それに従ったけど」って言ったら
#二人揃って「It's duality, ho, ho, ho」っていうから
#(一部脚色あり
#QuickCheck では Arbitrary class に arbitrary, coarbitrary の二つが属しているけど
#Koen Claessen の D 論、および QuickCheck2 では Coarbitrary class ってのがあって、arbitrary と coarbitrary は分かれているんだよね
#まあ、それはともかく、会話には続きがあって、「なにそれ、その duality ってのは」って聞いたら
#Koen の D 論をごそごそ出してきて
#「はじめのアイデアはこうだったのさ:
#instance (Coarbitrary a, Arbitrary b) => Arbitrary (a->b) where
arbitrary =
promote (\a -> coarbitrary a arbitrary)
#instance (Arbitrary a, CoArbitrary b) => CoArbitrary (a -> b) where
coarbitrary f gen =
do xs <- arbitrary
coarbitrary (map f xs) gen
#どうだい?」
#QuickCheck2 では、最初の方はもうちょっとましになってて
#(条件略) arbitrary = promote (`coarbitorary` arbitrary)
#まあ、でもおなじことだ
#しかし、これをみて adjoint とかいう議論はぼくにはわからない
#Shelarcy さんも同じ疑問をもって、直接 Koen にメール投げたって言ってた気がするな、QuickCheck を記事にするにあたって
#何のポインタにもなっていなくてもうしわけない
##coarbitrary の書き方が未だによくわからない
#promote つかいます