Ticket #4359: one-arg-lambda-case-th.patch

File one-arg-lambda-case-th.patch, 2.8 KB (added by mikhail.vorozhtsov, 10 months ago)

\case-expressions, patch for the template-haskell library

  • Language/Haskell/TH.hs

    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  
    5656    -- *** Expressions 
    5757        dyn, global, varE, conE, litE, appE, uInfixE, parensE, 
    5858        infixE, infixApp, sectionL, sectionR, 
    59         lamE, lam1E, tupE, condE, letE, caseE, appsE, 
     59        lamE, lam1E, lamCaseE, tupE, condE, letE, caseE, appsE, 
    6060        listE, sigE, recConE, recUpdE, stringE, fieldExp, 
    6161    -- **** Ranges 
    6262    fromE, fromThenE, fromToE, fromThenToE, 
  • Language/Haskell/TH/Lib.hs

    diff --git a/Language/Haskell/TH/Lib.hs b/Language/Haskell/TH/Lib.hs
    index dabad62..1edeb0b 100644
    a b  
    242242lam1E :: PatQ -> ExpQ -> ExpQ 
    243243lam1E p e = lamE [p] e 
    244244 
     245lamCaseE :: [MatchQ] -> ExpQ 
     246lamCaseE ms = sequence ms >>= return . LamCaseE 
     247 
    245248tupE :: [ExpQ] -> ExpQ 
    246249tupE es = do { es1 <- sequence es; return (TupE es1)} 
    247250 
  • Language/Haskell/TH/Ppr.hs

    diff --git a/Language/Haskell/TH/Ppr.hs b/Language/Haskell/TH/Ppr.hs
    index 0e443ef..a53fffe 100644
    a b  
    106106                                    <+> pprMaybeExp noPrec me2 
    107107pprExp i (LamE ps e) = parensIf (i > noPrec) $ char '\\' <> hsep (map (pprPat appPrec) ps) 
    108108                                           <+> text "->" <+> ppr e 
     109pprExp i (LamCaseE ms) = parensIf (i > noPrec) 
     110                       $ text "\\case" $$ nest nestDepth (ppr ms) 
    109111pprExp _ (TupE es) = parens $ sep $ punctuate comma $ map ppr es 
    110112pprExp _ (UnboxedTupE es) = hashParens $ sep $ punctuate comma $ map ppr es 
    111113-- Nesting in Cond is to avoid potential problems in do statments 
  • Language/Haskell/TH/Syntax.hs

    diff --git a/Language/Haskell/TH/Syntax.hs b/Language/Haskell/TH/Syntax.hs
    index 5cf9c07..65aff77 100644
    a b  
    862862                                       -- 
    863863                                       -- See Note [Unresolved infix] at "Language.Haskell.TH.Syntax#infix" 
    864864  | LamE [Pat] Exp                     -- ^ @{ \ p1 p2 -> e }@ 
     865  | LamCaseE [Match]                   -- ^ @{ \case m1; m2 }@ 
    865866  | TupE [Exp]                         -- ^ @{ (e1,e2) }  @ 
    866867  | UnboxedTupE [Exp]                  -- ^ @{ (# e1,e2 #) }  @ 
    867868  | CondE Exp Exp Exp                  -- ^ @{ if e1 then e2 else e3 }@