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

Reply via email to