@@ -19,11 +19,13 @@ patternBasic =
1919 return $ if isUpper c then PData x [] else PVar x
2020 ]
2121
22−patternMaybeAsVar :: Pattern -> IParser Pattern
23−patternMaybeAsVar x =
24− choice [ PAsVar <$>
25− (optional whitespace *> reserved "as" *> whitespace *> lowVar) <*> pure x,
26− pure x ]
22+asPattern :: IParser Pattern -> IParser Pattern
23+asPattern pattern = do
24+ p <- pattern
25+ var <- optionMaybe (try (whitespace >> reserved "as" >> whitespace >> lowVar))
26+ return $ case var of
27+ Just v -> PAsVar v p
28+ Nothing -> p
2729
2830patternRecord :: IParser Pattern
2931patternRecord = PRecord <$> brackets (commaSep1 lowVar)
@@ -44,9 +46,9 @@ patternConstructor :: IParser Pattern
4446patternConstructor = PData <$> capVar <*> spacePrefix patternTerm
4547
4648patternExpr :: IParser Pattern
47−patternExpr = (patternMaybeAsVar =<<
48− (foldr1 pcons <$> consSep1 (patternConstructor <|> patternTerm)))
49− <?> "pattern"
49+patternExpr =
50+ asPattern (foldr1 pcons <$> consSep1 (patternConstructor <|> patternTerm))
51+ <?> "pattern"
5052
5153makeLambda :: [Pattern] -> CExpr -> GuidCounter CExpr
5254makeLambda pats body = go (reverse pats) body