git.iko.soy/typeable/derive-api-th
on master help sign in
fix context
8969939odr
derive-api-th.cabal+2−1
@@ -37,7 +37,8 @@ library
37 openapi3
37 openapi3
38 default-language: Haskell2010
38 default-language: Haskell2010
39 default-extensions:
39 default-extensions:
40+ BlockArguments
40− DuplicateRecordFields
41+ , DuplicateRecordFields
41 , NamedFieldPuns
42 , NamedFieldPuns
42 , RecordWildCards
43 , RecordWildCards
43 , StandaloneDeriving
44 , StandaloneDeriving
src/Derive/API/TH.hs+6−3
@@ -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
133+ let
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) []] ] ]
138#endif
141#endif