diff --git a/src/Core/Lex.x b/src/Core/Lex.x index d86dded..89cbd31 100644 --- a/src/Core/Lex.x +++ b/src/Core/Lex.x @@ -76,6 +76,7 @@ rlp :- "module" { constTok TokenModule } "in" { constTok TokenIn } "where" { constTok TokenWhere } + "Pack" { constTok TokenPack } -- temp "\\" { constTok TokenLambda } "λ" { constTok TokenLambda } @@ -106,6 +107,7 @@ data CoreToken = TokenLet | TokenModule | TokenWhere | TokenComma + | TokenPack -- temp | TokenCase | TokenOf | TokenLambda diff --git a/src/Core/Parse.y b/src/Core/Parse.y index 7082216..ff36be7 100644 --- a/src/Core/Parse.y +++ b/src/Core/Parse.y @@ -36,6 +36,8 @@ import Data.Default.Class (def) where { Located _ _ _ TokenWhere } case { Located _ _ _ TokenCase } of { Located _ _ _ TokenOf } + ',' { Located _ _ _ TokenComma } + pack { Located _ _ _ TokenPack } -- temp in { Located _ _ _ TokenIn } litint { Located _ _ _ (TokenLitInt $$) } varname { Located _ _ _ (TokenVarName $$) } @@ -119,8 +121,12 @@ Alter : litint ParList '->' Expr { Alter $1 $2 $4 } Expr1 :: { Expr } Expr1 : litint { IntE $1 } | Id { Var $1 } + | PackCon { $1 } | '(' Expr ')' { $2 } +PackCon :: { Expr } +PackCon : pack '{' litint ',' litint '}' { Con $3 $5 } + Bindings :: { [Binding] } Bindings : Binding ';' Bindings { $1 : $3 } | Binding ';' { [$1] }