@@ -26,7 +26,6 @@ import Data.Aeson.TH as A
2626import Data.Aeson.Types
2727import Data.List
2828import Data.Maybe
29−-- import Data.Traversable
3029import Data.Typeable
3130import Language.Haskell.TH
3231import Language.Haskell.TH.Datatype
@@ -131,8 +130,12 @@ datatypeVarsTypes = datatypeVars
131130deriveArbitrary :: Name -> Q [Dec]
132131deriveArbitrary t = do
133132 tinfo <- reifyDatatype t
134− let ctx = AppT (ConT ''Arbitrary) <$> datatypeVarsTypes tinfo
135− pure [InstanceD Nothing ctx (ConT ''Arbitrary `AppT` datatypeType tinfo)
133+ let
134+ typ = datatypeType tinfo
135+ ctx = datatypeVarsTypes tinfo >>= \tv ->
136+ [ ConT ''Arbitrary `AppT` tv
137+ , ConT ''Arg `AppT` typ `AppT` tv ]
138+ pure [InstanceD Nothing ctx (ConT ''Arbitrary `AppT` typ)
136139 [ FunD 'arbitrary [Clause [] (NormalB $ VarE 'genericArbitrary) []]
137140 , FunD 'shrink [Clause [] (NormalB $ VarE 'genericShrink) []] ] ]
138141#endif