[Haskell-cafe] Re: Positive integers

Nils Anders Danielsson nad at cs.chalmers.se
Fri Mar 24 12:36:55 EST 2006


On Fri, 24 Mar 2006, Henning Thielemann <lemming at henning-thielemann.de> 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



More information about the Haskell-Cafe mailing list