[Haskell-cafe] QuickCheck Arbitrary - infinite recursion on
recursive GADTs?
Marc Weber
marco-oweber at gmx.de
Mon Jun 4 22:40:20 EDT 2007
example:
data A = A INt
| B [A]
instace Arbitrary A where
arbitrary = oneof [ liftM A arbitrary
, liftM B arbitrary
]
But now QuickCheck will propably create a test value
A ( B [ A ( B [ A .... -> no end
Is there an easy QuickCheck way to prevent this?
I can think of:
a) using sized to pass when to stop (decrement the value ..)
b) using some type hackary
data Recursive a = R a
then use arbitrary :: R ( R ( a ))
and remove one R each time..
c) pass a recursion indicator manually and decrement that...
Which would you choose?
Marc
More information about the Haskell-Cafe
mailing list