* martin <martin.drautzb...@web.de> [2013-07-13 10:10:39+0200]
> Am 07/12/2013 09:18 AM, schrieb Roman Cheplyaka:
> 
> > QuickCheck's Gen is a functor. So you can generate a list, and then
> > use fmap to add a hash to it.
> > 
> >   instance Arbitrary HashedList where
> >     arbitrary = addHashToList <$> arbitrary
> > 
> 
> This requires HashedList to be a new type, right? So far my code only
> used type synonyms.
> 
> Does this mean I have to convert type synonyms into types in order to
> use QuickCheck?

Probably. Technically, you could use OverlappingInstances to provide a
special case for your lists (because they have a spcific shape), but I'd
consider it a kludge in this case.

Or you can avoid defining an instance at all, as Aleksey has pointed
out.

> Does this mean I have to "plan for QuickCheck" when I design my types?

Kind of. It's not really specific to QuickCheck. Every time you want to
give some non-standard instances to your types, you should be using
newtypes or data-types.

More generally, you should be using newtypes or data types every time
when you introduce a non-trivial abstraction that isn't described by the
standard types. You case is a good example of that.

Roman

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to