@@ -19,11 +19,13 @@ patternBasic =
19 return $ if isUpper c then PData x [] else PVar x
19 return $ if isUpper c then PData x [] else PVar x
22−patternMaybeAsVar :: Pattern -> IParser Pattern
22+asPattern :: IParser Pattern -> IParser Pattern
23−patternMaybeAsVar x =
23+asPattern pattern = do
24− choice [ PAsVar <$>
24+ p <- pattern
25− (optional whitespace *> reserved "as" *> whitespace *> lowVar) <*> pure x,
25+ var <- optionMaybe (try (whitespace >> reserved "as" >> whitespace >> lowVar))
26− pure x ]
26+ return $ case var of
28patternRecord :: IParser Pattern
30patternRecord :: IParser Pattern
29patternRecord = PRecord <$> brackets (commaSep1 lowVar)
31patternRecord = PRecord <$> brackets (commaSep1 lowVar)
@@ -44,9 +46,9 @@ patternConstructor :: IParser Pattern
44patternConstructor = PData <$> capVar <*> spacePrefix patternTerm
46patternConstructor = PData <$> capVar <*> spacePrefix patternTerm
46patternExpr :: IParser Pattern
48patternExpr :: IParser Pattern
47−patternExpr = (patternMaybeAsVar =<<
49+patternExpr =
48− (foldr1 pcons <$> consSep1 (patternConstructor <|> patternTerm)))
50+ asPattern (foldr1 pcons <$> consSep1 (patternConstructor <|> patternTerm))
49− <?> "pattern"
51+ <?> "pattern"
51makeLambda :: [Pattern] -> CExpr -> GuidCounter CExpr
53makeLambda :: [Pattern] -> CExpr -> GuidCounter CExpr
52makeLambda pats body = go (reverse pats) body
54makeLambda pats body = go (reverse pats) body