diff options
author | Richard Eisenberg <eir@cis.upenn.edu> | 2014-11-04 16:38:22 -0500 |
---|---|---|
committer | Richard Eisenberg <eir@cis.upenn.edu> | 2014-11-12 12:36:41 -0500 |
commit | e4efb7b8de8ff3781a42e69e35dee981d9885fcf (patch) | |
tree | 2efa3e629ec0e568c48e4fd3fd23df1c91e3abad /libraries/template-haskell/Language | |
parent | fe71a7e6e3513ff18f7e6ec57284168c052262fc (diff) | |
download | haskell-e4efb7b8de8ff3781a42e69e35dee981d9885fcf.tar.gz |
Fix #9064 by adding support for generic default signatures to TH.
Diffstat (limited to 'libraries/template-haskell/Language')
4 files changed, 11 insertions, 1 deletions
diff --git a/libraries/template-haskell/Language/Haskell/TH.hs b/libraries/template-haskell/Language/Haskell/TH.hs index 1919079108..e038a3ba6b 100644 --- a/libraries/template-haskell/Language/Haskell/TH.hs +++ b/libraries/template-haskell/Language/Haskell/TH.hs @@ -124,7 +124,7 @@ module Language.Haskell.TH( -- **** Data valD, funD, tySynD, dataD, newtypeD, -- **** Class - classD, instanceD, sigD, standaloneDerivD, + classD, instanceD, sigD, standaloneDerivD, defaultSigD, -- **** Role annotations roleAnnotD, -- **** Type Family / Data Family diff --git a/libraries/template-haskell/Language/Haskell/TH/Lib.hs b/libraries/template-haskell/Language/Haskell/TH/Lib.hs index 04f8fba610..efe597275b 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Lib.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Lib.hs @@ -466,6 +466,12 @@ standaloneDerivD ctxtq tyq = ty <- tyq return $ StandaloneDerivD ctxt ty +defaultSigD :: Name -> TypeQ -> DecQ +defaultSigD n tyq = + do + ty <- tyq + return $ DefaultSigD n ty + tySynEqn :: [TypeQ] -> TypeQ -> TySynEqnQ tySynEqn lhs rhs = do diff --git a/libraries/template-haskell/Language/Haskell/TH/Ppr.hs b/libraries/template-haskell/Language/Haskell/TH/Ppr.hs index caa0183131..5f3a0c6c9b 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Ppr.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Ppr.hs @@ -330,6 +330,9 @@ ppr_dec _ (RoleAnnotD name roles) ppr_dec _ (StandaloneDerivD cxt ty) = hsep [ text "deriving instance", pprCxt cxt, ppr ty ] +ppr_dec _ (DefaultSigD n ty) + = hsep [ text "default", pprPrefixOcc n, text "::", ppr ty ] + ppr_data :: Doc -> Cxt -> Name -> Doc -> [Con] -> [Name] -> Doc ppr_data maybeInst ctxt t argsDoc cs decs = sep [text "data" <+> maybeInst diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs index 17fdc85c60..ddbe3a98e2 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs @@ -1216,6 +1216,7 @@ data Dec | RoleAnnotD Name [Role] -- ^ @{ type role T nominal representational }@ | StandaloneDerivD Cxt Type -- ^ @{ deriving instance Ord a => Ord (Foo a) }@ + | DefaultSigD Name Type -- ^ @{ default size :: Data a => a -> Int }@ deriving( Show, Eq, Data, Typeable, Generic ) -- | One equation of a type family instance or closed type family. The |