[Haskell-beginners] `coarbitrary' is not a (visible) method of class `Arbitrary'

Daniel Fischer daniel.is.fischer at web.de
Sat Dec 19 08:46:00 EST 2009


Am Samstag 19 Dezember 2009 14:20:43 schrieb Amy de Buitléir:
> I'm trying to follow the instructions in
> http://haskell.org/haskellwiki/How_to_write_a_Haskell_program. I'm at
> the step where we've just written a QuickCheck test:
>
> amy at localhost ~/forbairt/haq $ cat Tests.hs
> import Char
> import List
> import Test.QuickCheck
> import Text.Printf
>
> main  = mapM_ (\(s,a) -> printf "%-25s: " s >> a) tests
>
> instance Arbitrary Char where
>     arbitrary     = choose ('\0', '\128')
>     coarbitrary c = variant (ord c `rem` 4)
>
> -- reversing twice a finite list, is the same as identity
> prop_reversereverse s = (reverse . reverse) s == id s
>     where _ = s :: [Int]
>
> -- and add this to the tests list
> tests  = [("reverse.reverse/id", test prop_reversereverse)]
>
>
> But when I try to run it, I get the following errors:
>
> amy at localhost ~/forbairt/haq $ runhaskell Tests.hs
>
> Tests.hs:10:4:
>     `coarbitrary' is not a (visible) method of class `Arbitrary'
>
> Tests.hs:17:33: Not in scope: `test'
>
>
> I think this has something to do with the changes between QuickCheck
> v1 and v2.

Yes. coarbitrary has moved to its own class, CoArbitrary.
Now there's also method shrink in Arbitrary.

There is already an instance Arbitrary Char in QC 2, as well as instance CoArbitrary Char.

In QC 1, test was a synonym for quickCheck, so why not use quickCheck?

> Can someone tell me what I need to do to make this example
> work? Thank you in advance!
>
> Amy

HTH,
Daniel



More information about the Beginners mailing list