@@ -26,7 +26,6 @@ import Data.Aeson.TH as A
26import Data.Aeson.Types
26import Data.Aeson.Types
27import Data.List
27import Data.List
28import Data.Maybe
28import Data.Maybe
29−-- import Data.Traversable
30import Data.Typeable
29import Data.Typeable
31import Language.Haskell.TH
30import Language.Haskell.TH
32import Language.Haskell.TH.Datatype
31import Language.Haskell.TH.Datatype
@@ -131,8 +130,12 @@ datatypeVarsTypes = datatypeVars
131deriveArbitrary :: Name -> Q [Dec]
130deriveArbitrary :: Name -> Q [Dec]
132deriveArbitrary t = do
131deriveArbitrary t = do
133 tinfo <- reifyDatatype t
132 tinfo <- reifyDatatype t
134+ typ = datatypeType tinfo
134− let ctx = AppT (ConT ''Arbitrary) <$> datatypeVarsTypes tinfo
135+ ctx = datatypeVarsTypes tinfo >>= \tv ->
136+ [ ConT ''Arbitrary `AppT` tv
137+ , ConT ''Arg `AppT` typ `AppT` tv ]
135− pure [InstanceD Nothing ctx (ConT ''Arbitrary `AppT` datatypeType tinfo)
138+ pure [InstanceD Nothing ctx (ConT ''Arbitrary `AppT` typ)
136 [ FunD 'arbitrary [Clause [] (NormalB $ VarE 'genericArbitrary) []]
139 [ FunD 'arbitrary [Clause [] (NormalB $ VarE 'genericArbitrary) []]
137 , FunD 'shrink [Clause [] (NormalB $ VarE 'genericShrink) []] ] ]
140 , FunD 'shrink [Clause [] (NormalB $ VarE 'genericShrink) []] ] ]