{-# LANGUAGE TemplateHaskell #-}
-- | Test for TH deriving
module Deriving where
import Data.SafeCopy.Store
import Test.QuickCheck.Arbitrary
import Test.QuickCheck.Gen
data A = A1 | A2 | A3
deriving (Bounded, Enum, Show, Eq)
instance Arbitrary A where
arbitrary = arbitraryBoundedEnum
deriveSafeCopy 1 'base ''A
data B = B1 | B2 Bool | B3 A A
deriving (Show, Eq)
instance Arbitrary B where
arbitrary = do
n <- choose (0, 2 :: Int)
case n of
0 -> pure B1
1 -> B2 <$> arbitrary
2 -> B3 <$> arbitrary <*> arbitrary
_ -> pure B1
deriveSafeCopy 1 'base ''B