diff options
author | Matthew Pickering <matthewtpickering@gmail.com> | 2017-07-11 19:01:31 +0100 |
---|---|---|
committer | Matthew Pickering <matthewtpickering@gmail.com> | 2017-07-11 19:02:44 +0100 |
commit | 81de42cb589540666a365808318589211924f9cd (patch) | |
tree | 83c4c361404260b5aa3d0792392d9ed09f18388e /libraries | |
parent | ccb849f8ea39582d2cfc5c045abe9768992dccb6 (diff) | |
download | haskell-81de42cb589540666a365808318589211924f9cd.tar.gz |
Add Template Haskell support for overloaded labels
Reviewers: RyanGlScott, austin, goldfire, bgamari
Reviewed By: RyanGlScott, goldfire, bgamari
Subscribers: rwbarton, thomie
Differential Revision: https://phabricator.haskell.org/D3715
Diffstat (limited to 'libraries')
4 files changed, 8 insertions, 1 deletions
diff --git a/libraries/template-haskell/Language/Haskell/TH/Lib.hs b/libraries/template-haskell/Language/Haskell/TH/Lib.hs index 860ccc3f63..78fbc41d6f 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Lib.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Lib.hs @@ -31,7 +31,7 @@ module Language.Haskell.TH.Lib ( normalB, guardedB, normalG, normalGE, patG, patGE, match, clause, -- *** Expressions - dyn, varE, unboundVarE, conE, litE, appE, appTypeE, uInfixE, parensE, + dyn, varE, unboundVarE, labelE, conE, litE, appE, appTypeE, uInfixE, parensE, staticE, infixE, infixApp, sectionL, sectionR, lamE, lam1E, lamCaseE, tupE, unboxedTupE, unboxedSumE, condE, multiIfE, letE, caseE, appsE, listE, sigE, recConE, recUpdE, stringE, fieldExp, @@ -428,6 +428,9 @@ staticE = fmap StaticE unboundVarE :: Name -> ExpQ unboundVarE s = return (UnboundVarE s) +labelE :: String -> ExpQ +labelE s = return (LabelE s) + -- ** 'arithSeqE' Shortcuts fromE :: ExpQ -> ExpQ fromE x = do { a <- x; return (ArithSeqE (FromR a)) } diff --git a/libraries/template-haskell/Language/Haskell/TH/Ppr.hs b/libraries/template-haskell/Language/Haskell/TH/Ppr.hs index 4173991d6d..122f0b9ec0 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Ppr.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Ppr.hs @@ -199,6 +199,7 @@ pprExp _ (RecUpdE e fs) = pprExp appPrec e <> braces (pprFields fs) pprExp i (StaticE e) = parensIf (i >= appPrec) $ text "static"<+> pprExp appPrec e pprExp _ (UnboundVarE v) = pprName' Applied v +pprExp _ (LabelE s) = text "#" <> text s pprFields :: [(Name,Exp)] -> Doc pprFields = sep . punctuate comma . map (\(s,e) -> ppr s <+> equals <+> ppr e) diff --git a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs index a6ead31e70..14aeaeb380 100644 --- a/libraries/template-haskell/Language/Haskell/TH/Syntax.hs +++ b/libraries/template-haskell/Language/Haskell/TH/Syntax.hs @@ -1582,6 +1582,7 @@ data Exp | RecUpdE Exp [FieldExp] -- ^ @{ (f x) { z = w } }@ | StaticE Exp -- ^ @{ static e }@ | UnboundVarE Name -- ^ @{ _x }@ (hole) + | LabelE String -- ^ @{ #x }@ ( Overloaded label ) deriving( Show, Eq, Ord, Data, Generic ) type FieldExp = (Name,Exp) diff --git a/libraries/template-haskell/changelog.md b/libraries/template-haskell/changelog.md index 50f1709b83..305e39cb26 100644 --- a/libraries/template-haskell/changelog.md +++ b/libraries/template-haskell/changelog.md @@ -32,6 +32,8 @@ - `interruptible` and `funDep` - `valueAnnotation`, `typeAnnotation`, and `moduleAnnotation` + * Add support for overloaded labels. + ## 2.11.0.0 *May 2016* * Bundled with GHC 8.0.1 |