* 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