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