Use uncurry to map PCase
authorJoachim Breitner <mail@joachim-breitner.de>
Fri, 14 Nov 2008 16:57:48 +0000 (16:57 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Fri, 14 Nov 2008 16:57:48 +0000 (16:57 +0000)
Expr.hs
Term2Expr.hs

diff --git a/Expr.hs b/Expr.hs
index a928862..33e4c1a 100644 (file)
--- a/Expr.hs
+++ b/Expr.hs
@@ -36,6 +36,7 @@ data Expr
        | ERight Expr
        | CaseUnit Expr Expr
        | EitherMap
+       | Uncurry
        | HeadMap
        | EUnit
        | Singleton Expr
@@ -412,6 +413,7 @@ instance Show Expr where
                                        showsPrec 11 t2
        showsPrec _ EitherMap     = showString "eitherMap"
        showsPrec _ HeadMap       = showString "headMap"
+       showsPrec _ Uncurry       = showString "uncurry"
        showsPrec _ Bottom        = showString "_|_"
 
 showIntercalate :: ShowS -> [ShowS] -> ShowS
index 6b7edd8..0d236f0 100644 (file)
@@ -78,7 +78,11 @@ absTerm2Expr ex (T.ECase e vl el vr er)
                                    (absTerm2Expr ex e)
 absTerm2Expr ex (T.Right t)     = ERight (absTerm2Expr ex t)
 absTerm2Expr ex (T.Left  t)     = ELeft (absTerm2Expr ex t)
-absTerm2Expr ex (T.PCase _ _ _ _) = trace "Can not convert PCase" undefined
+absTerm2Expr ex (T.PCase pt v1 v2 e) = Uncurry `app'`
+                               (lambda' (E.Var (termVar2EVar v1))
+                                         (lambda' (E.Var (termVar2EVar v2))
+                                                  (absTerm2Expr ex e)))
+                                `app'` (absTerm2Expr ex pt)
 
 termVar2EVar (T.TermVar i) = E.FromTypVar i