From dead9eb75a0b3647e5566767c11458582944500f Mon Sep 17 00:00:00 2001 From: sebastianselander Date: Fri, 5 May 2023 16:58:11 +0200 Subject: [PATCH] Pattern matching in lambda added --- Grammar.cf | 3 ++- src/Desugar/Desugar.hs | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Grammar.cf b/Grammar.cf index f0a06b9..b7b4af3 100644 --- a/Grammar.cf +++ b/Grammar.cf @@ -65,7 +65,8 @@ internal EVar. Exp4 ::= LIdent; EApp. Exp3 ::= Exp3 Exp4; EAdd. Exp2 ::= Exp2 "+" Exp3; ELet. Exp1 ::= "let" Bind "in" Exp1; - EAbs. Exp1 ::= "\\" LIdent "." Exp1; + EAbsS. Exp1 ::= "\\" Pattern "." Exp1; +internal EAbs. Exp1 ::= "\\" LIdent "." Exp1; ECase. Exp1 ::= "case" Exp "of" "{" [Branch] "}"; EAnn. Exp ::= Exp1 ":" Type; diff --git a/src/Desugar/Desugar.hs b/src/Desugar/Desugar.hs index 550d7c3..aac92f3 100644 --- a/src/Desugar/Desugar.hs +++ b/src/Desugar/Desugar.hs @@ -65,6 +65,7 @@ desugarExp = \case EApp e1 e2 -> EApp (desugarExp e1) (desugarExp e2) EAdd e1 e2 -> EAdd (desugarExp e1) (desugarExp e2) EAbs i e -> EAbs i (desugarExp e) + EAbsS pat e -> EAbs (LIdent "$zz$") (ECase (EVar "$zz$") [Branch (desugarPattern pat) (desugarExp e)]) ELet b e -> ELet (desugarBind b) (desugarExp e) ECase e br -> ECase (desugarExp e) (map desugarBranch br) EAnn e t -> EAnn (desugarExp e) t