> I would like to define my own arbitrary which should only give
> i. e. which should behave like
> instance Arbitrary Integer where
> arbitrary = elements ([0..]).
> This definition gives a "multiple definition" error. Is there a way to
> hide the definition of arbitrary::Gen Int of QuickCheck, such that I
> use my own definition ?
The easiest way is to newtype it, and use fromIntegral to convert:
newtype Natural = N Integer
instance Arbitrary Integer where
arbitrary = N <$> elements [0..]
instance Integral Natural where
fromIntegral (N x) = fromIntegral x