haskell-ja > Archives > 2009/07/29

2009/07/29 00:21:07 UTCikegami
#
自己言及しようとするのか、そいつはおもしろいね
#
しかし、eval は Haskell では敵だからなあ(実現可能だが)
2009/07/29 00:31:46 UTCikegami
#
すくなくとも Haskell 98 ではできない、というのが答えだと思うけどこれは sakai さん待ち。理由は、型システムが System F だから。
#
だけど、GHC の黒魔術 (unsafe系やTH) を使わずに、RankNTypes (これも黒いかなー) を使うと自己言及できるだろうか
#
RankNTypes は自己言及できそうだけど、こんどは QuickCheck の Arbitrary を作るのが難しくなっちゃうな
#
polymorphism じゃなくてー、具体的な型を自己言及するのは難しい
#
が、QuickCheck が変わることで、それをやろうとしているらしい : http://www.haskell.org/ghc/docs/latest/html/libraries/QuickCheck/Test-QuickCheck-Poly.html
#
ええと、単に newtype するかわりに、型構築子として Poly という特殊な名前をつければいいんだな
#
A という型を型レベルでテストしたければ、newtype PA = Poly A を準備する
#
すると Arbitrary の候補になるけど...あれ、そもそも Poly a は Arbitrary のインスタンスなんだから、どういうふうに Gen にわたされているのかは定義済みだな、むー
2009/07/29 01:13:31 UTCikegami
#
しかし、Alpha とか Beta とか何がしたいのかよくわからんので、ソースをみるしかないとか、そして衝撃の事実
#
結論からいうと Poly は独特の使い方をするのであって、さっきわたしが言ったことはうそ
#
"The idea is you can't cheat"
#
http://www.haskell.org/ghc/docs/latest/html/libraries/QuickCheck/src/Test-QuickCheck-Poly.html#ALPHA
#
誰得
#
Int に符号化したらいいとか、うーむすぎる
2009/07/29 11:19:28 UTCnwn
#
RankNTypes を使った自己言及ってどういうことですか?