Added lambda-case support.
authorMikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com>
Fri, 13 Jul 2012 17:09:31 +0000 (00:09 +0700)
committerSimon Marlow <marlowsd@gmail.com>
Mon, 16 Jul 2012 10:09:51 +0000 (11:09 +0100)
libraries/template-haskell/Language/Haskell/TH.hs
libraries/template-haskell/Language/Haskell/TH/Lib.hs
libraries/template-haskell/Language/Haskell/TH/Ppr.hs
libraries/template-haskell/Language/Haskell/TH/Syntax.hs

index 8d4128c..fc4722f 100644 (file)
@@ -56,7 +56,7 @@ module Language.Haskell.TH(
     -- *** Expressions
        dyn, global, varE, conE, litE, appE, uInfixE, parensE,
        infixE, infixApp, sectionL, sectionR,
-       lamE, lam1E, tupE, condE, letE, caseE, appsE,
+       lamE, lam1E, lamCaseE, tupE, condE, letE, caseE, appsE,
        listE, sigE, recConE, recUpdE, stringE, fieldExp,
     -- **** Ranges
     fromE, fromThenE, fromToE, fromThenToE,
index dabad62..1edeb0b 100644 (file)
@@ -242,6 +242,9 @@ lamE ps e = do ps' <- sequence ps
 lam1E :: PatQ -> ExpQ -> ExpQ
 lam1E p e = lamE [p] e
 
+lamCaseE :: [MatchQ] -> ExpQ
+lamCaseE ms = sequence ms >>= return . LamCaseE
+
 tupE :: [ExpQ] -> ExpQ
 tupE es = do { es1 <- sequence es; return (TupE es1)}
 
index 0e443ef..a53fffe 100644 (file)
@@ -106,6 +106,8 @@ pprExp _ (InfixE me1 op me2) = parens $ pprMaybeExp noPrec me1
                                     <+> pprMaybeExp noPrec me2
 pprExp i (LamE ps e) = parensIf (i > noPrec) $ char '\\' <> hsep (map (pprPat appPrec) ps)
                                            <+> text "->" <+> ppr e
+pprExp i (LamCaseE ms) = parensIf (i > noPrec)
+                       $ text "\\case" $$ nest nestDepth (ppr ms)
 pprExp _ (TupE es) = parens $ sep $ punctuate comma $ map ppr es
 pprExp _ (UnboxedTupE es) = hashParens $ sep $ punctuate comma $ map ppr es
 -- Nesting in Cond is to avoid potential problems in do statments
index 5cf9c07..65aff77 100644 (file)
@@ -862,6 +862,7 @@ data Exp
                                        --
                                        -- See Note [Unresolved infix] at "Language.Haskell.TH.Syntax#infix"
   | LamE [Pat] Exp                     -- ^ @{ \ p1 p2 -> e }@
+  | LamCaseE [Match]                   -- ^ @{ \case m1; m2 }@
   | TupE [Exp]                         -- ^ @{ (e1,e2) }  @
   | UnboxedTupE [Exp]                  -- ^ @{ (# e1,e2 #) }  @
   | CondE Exp Exp Exp                  -- ^ @{ if e1 then e2 else e3 }@