{-# LANGUAGE DeriveGeneric #-} module Fancy where import Data.Map (Map) import GHC.Generics (Generic (..)) import Test.QuickCheck (Arbitrary (..), elements, genericShrink) import Zinza data Fancy = Fancy { fancyBoolA :: Bool , fancyBoolB :: Bool , fancyString :: String , fancyMap :: Map String String , fancyNot :: Bool -> Bool } deriving (Generic) instance Eq Fancy where Fancy x0 x1 x2 x3 x4 == Fancy y0 y1 y2 y3 y4 = and [ x0 == y0 , x1 == y1 , x2 == y2 , x3 == y3 , x4 True == y4 True , x4 False == y4 False ] instance Zinza Fancy where toType = genericToTypeSFP toValue = genericToValueSFP fromValue = genericFromValueSFP instance Arbitrary Fancy where arbitrary = Fancy <$> arbitrary <*> arbitrary <*> arbitrary <*> arbitrary <*> elements [ id , const True , const False , not ] shrink = genericShrink