diff options
author | Cale Gibbard <cgibbard@gmail.com> | 2021-02-22 15:56:22 -0500 |
---|---|---|
committer | Sebastian Graf <sebastian.graf@kit.edu> | 2021-03-02 20:02:28 +0100 |
commit | d793863259ed18b23ea28e9252aaec8d50929685 (patch) | |
tree | 68fa3c4d840d261d2bd980643f0082cfcbfe7c34 /libraries/template-haskell | |
parent | 4e28f467b8fe4530dc488ae2577e3100164affa2 (diff) | |
download | haskell-wip/T14422.tar.gz |
An initial attempt at type-directed COMPLETE pragmas.wip/T14422
Implement some suggestions from Sebastian Graf
Fix a test, add another
cmScrutineeType -> cmResultType, and change/add documentation
Simplify PmAltConSet to not include type information
Diffstat (limited to 'libraries/template-haskell')
3 files changed, 11 insertions, 5 deletions
diff --git a/libraries/template-haskell/Language/Haskell/TH/Lib/Internal.hs b/libraries/template-haskell/Language/Haskell/TH/Lib/Internal.hs index 67017d4926..25b7062da8 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Lib/Internal.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Lib/Internal.hs @@ -513,8 +513,14 @@ pragAnnD target expr pragLineD :: Quote m => Int -> String -> m Dec pragLineD line file = pure $ PragmaD $ LineP line file -pragCompleteD :: Quote m => [Name] -> Maybe Name -> m Dec -pragCompleteD cls mty = pure $ PragmaD $ CompleteP cls mty +pragCompleteD :: Quote m => [Name] -> Maybe (m Type) -> m Dec +pragCompleteD cls mty = + case mty of + Nothing -> pure $ PragmaD $ CompleteP cls Nothing + Just ty -> + do + t <- ty + pure $ PragmaD $ CompleteP cls (Just t) dataInstD :: Quote m => m Cxt -> (Maybe [m (TyVarBndr ())]) -> m Type -> Maybe (m Kind) -> [m Con] -> [m DerivClause] -> m Dec diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs index 6508c07a65..3dad480bc2 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs @@ -2355,7 +2355,7 @@ data Pragma = InlineP Name Inline RuleMatch Phases | RuleP String (Maybe [TyVarBndr ()]) [RuleBndr] Exp Exp Phases | AnnP AnnTarget Exp | LineP Int String - | CompleteP [Name] (Maybe Name) + | CompleteP [Name] (Maybe Type) -- ^ @{ {\-\# COMPLETE C_1, ..., C_i [ :: T ] \#-} }@ deriving( Show, Eq, Ord, Data, Generic ) diff --git a/libraries/template-haskell/tests/pragCompletePpr.hs b/libraries/template-haskell/tests/pragCompletePpr.hs index cb06cdb10d..60fd477667 100644 --- a/libraries/template-haskell/tests/pragCompletePpr.hs +++ b/libraries/template-haskell/tests/pragCompletePpr.hs @@ -1,7 +1,7 @@ module Main (main) where import Language.Haskell.TH.Ppr (ppr) -import Language.Haskell.TH.Syntax (Dec (PragmaD), Pragma (CompleteP), mkName) +import Language.Haskell.TH.Syntax (Dec (PragmaD), Pragma (CompleteP), mkName, Type(ConT)) main :: IO () -main = print $ ppr $ PragmaD $ CompleteP [mkName "Foo", mkName "Bar"] $ Just $ mkName "Bar" +main = print $ ppr $ PragmaD $ CompleteP [mkName "Foo", mkName "Bar"] $ Just (ConT (mkName "Bar")) |