How about this?
class ArbitraryDefault a where {}
instance (Integral a, Bounded a, ArbitraryDefault a) => Arbitrary a where
arbitrary = arbitraryBound
coarbitrary a = error "Not implemented"
instance ArbitraryDefault Word16
instance ArbitraryDefault Word32
instance ArbitraryDefault Word64
arbitraryBound :: forall a.(Integral a, Bounded a) => Gen a
arbitraryBound = do let mx,mn :: Integer
mx = fromIntegral (maxBound :: a)
mn = fromIntegral (minBound :: a)
c <- choose (mx, mn)
return (fromIntegral c)
Joel Reymont wrote:
I came up with this but can it be done better? I'm wishing for
"default class methods" :-).
instance Arbitrary Word16 where
arbitrary = arbitraryBound
coarbitrary a = error "Not implemented"
instance Arbitrary Word32 where
arbitrary = arbitraryBound
coarbitrary a = error "Not implemented"
instance Arbitrary Word64 where
arbitrary = arbitraryBound
coarbitrary a = error "Not implemented"
arbitraryBound :: forall a.(Integral a, Bounded a) => Gen a
arbitraryBound = do let mx,mn :: Integer
mx = fromIntegral (maxBound :: a)
mn = fromIntegral (minBound :: a)
c <- choose (mx, mn)
return (fromIntegral c)
On Oct 27, 2005, at 6:13 PM, Joel Reymont wrote:
Is there a way to squeeze this boilerplate code?
class Arbitrary
instance Arbitrary Word16 where
arbitrary = do let mx,mn :: Integer
mx = fromIntegral (maxBound :: Word16)
mn = fromIntegral (minBound :: Word16)
c <- choose (mx, mn)
return (fromIntegral c)
coarbitrary a = error "Not implemented"
instance Arbitrary Word32 where
arbitrary = do let mx,mn :: Integer
mx = fromIntegral (maxBound :: Word32)
mn = fromIntegral (minBound :: Word32)
c <- choose (mx, mn)
return (fromIntegral c)
coarbitrary a = error "Not implemented"
instance Arbitrary Word64 where
arbitrary = do let mx,mn :: Integer
mx = fromIntegral (maxBound :: Word64)
mn = fromIntegral (minBound :: Word64)
c <- choose (mx, mn)
return (fromIntegral c)
coarbitrary a = error "Not implemented"
--
http://wagerlabs.com/
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe