On Fri, 24 Mar 2006, Henning Thielemann <[EMAIL PROTECTED]> wrote: > Further on think of QuickCheck: A Cardinal type with an Arbitrary > instance would save us the (>=0) condition and it would reduce the > number of tests that must be skipped because of non-fulfilled > conditions. Because I was confronted with adding positivity checks to > QuickCheck properties quite frequently, I finally wrote wrappers > newtype Cardinal = Cardinal Integer deriving (Show, Read, Eq, Ord, Ix) > newtype Card = Card Int deriving (Show, Read, Eq, Ord, Ix) > in order to simplify such checks.
I wouldn't mind having a natural number type, but the technique above is useful anyway. When using QuickCheck you often need custom generators, and the technique removes the need for non-dependent forAlls: prop_foo (Cardinal n) (Balanced t) (Prime p) (Small s) = ... n ... t ... p ... s ... The property above is considerably easier to read than the following one: prop_foo = forAll cardinal $ \c -> forAll balanced $ \t -> forAll prime $ \p -> forAll small $ \s -> ... n ... t ... p ... s ... It would be nice to have a bunch of newtypes like these in a library. -- /NAD _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe