From 7246ef129ad03d38c16207472fc3807e98a27713 Mon Sep 17 00:00:00 2001
From: Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com>
Date: Sat, 14 Jul 2012 00:09:31 +0700
Subject: [PATCH] Added lambda-case support.
---
Language/Haskell/TH.hs | 2 +-
Language/Haskell/TH/Lib.hs | 3 +++
Language/Haskell/TH/Ppr.hs | 2 ++
Language/Haskell/TH/Syntax.hs | 1 +
4 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/Language/Haskell/TH.hs b/Language/Haskell/TH.hs
index 8d4128c..fc4722f 100644
|
a
|
b
|
|
| 56 | 56 | -- *** Expressions |
| 57 | 57 | dyn, global, varE, conE, litE, appE, uInfixE, parensE, |
| 58 | 58 | infixE, infixApp, sectionL, sectionR, |
| 59 | | lamE, lam1E, tupE, condE, letE, caseE, appsE, |
| | 59 | lamE, lam1E, lamCaseE, tupE, condE, letE, caseE, appsE, |
| 60 | 60 | listE, sigE, recConE, recUpdE, stringE, fieldExp, |
| 61 | 61 | -- **** Ranges |
| 62 | 62 | fromE, fromThenE, fromToE, fromThenToE, |
diff --git a/Language/Haskell/TH/Lib.hs b/Language/Haskell/TH/Lib.hs
index dabad62..1edeb0b 100644
|
a
|
b
|
|
| 242 | 242 | lam1E :: PatQ -> ExpQ -> ExpQ |
| 243 | 243 | lam1E p e = lamE [p] e |
| 244 | 244 | |
| | 245 | lamCaseE :: [MatchQ] -> ExpQ |
| | 246 | lamCaseE ms = sequence ms >>= return . LamCaseE |
| | 247 | |
| 245 | 248 | tupE :: [ExpQ] -> ExpQ |
| 246 | 249 | tupE es = do { es1 <- sequence es; return (TupE es1)} |
| 247 | 250 | |
diff --git a/Language/Haskell/TH/Ppr.hs b/Language/Haskell/TH/Ppr.hs
index 0e443ef..a53fffe 100644
|
a
|
b
|
|
| 106 | 106 | <+> pprMaybeExp noPrec me2 |
| 107 | 107 | pprExp i (LamE ps e) = parensIf (i > noPrec) $ char '\\' <> hsep (map (pprPat appPrec) ps) |
| 108 | 108 | <+> text "->" <+> ppr e |
| | 109 | pprExp i (LamCaseE ms) = parensIf (i > noPrec) |
| | 110 | $ text "\\case" $$ nest nestDepth (ppr ms) |
| 109 | 111 | pprExp _ (TupE es) = parens $ sep $ punctuate comma $ map ppr es |
| 110 | 112 | pprExp _ (UnboxedTupE es) = hashParens $ sep $ punctuate comma $ map ppr es |
| 111 | 113 | -- Nesting in Cond is to avoid potential problems in do statments |
diff --git a/Language/Haskell/TH/Syntax.hs b/Language/Haskell/TH/Syntax.hs
index 5cf9c07..65aff77 100644
|
a
|
b
|
|
| 862 | 862 | -- |
| 863 | 863 | -- See Note [Unresolved infix] at "Language.Haskell.TH.Syntax#infix" |
| 864 | 864 | | LamE [Pat] Exp -- ^ @{ \ p1 p2 -> e }@ |
| | 865 | | LamCaseE [Match] -- ^ @{ \case m1; m2 }@ |
| 865 | 866 | | TupE [Exp] -- ^ @{ (e1,e2) } @ |
| 866 | 867 | | UnboxedTupE [Exp] -- ^ @{ (# e1,e2 #) } @ |
| 867 | 868 | | CondE Exp Exp Exp -- ^ @{ if e1 then e2 else e3 }@ |