From 7ed6a184f15975d694657124c01d00ef6b394531 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roman=20Smr=C5=BE?= Date: Mon, 24 Apr 2023 22:11:51 +0200 Subject: Fix parsing of two-element lists --- src/Parser/Expr.hs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/Parser/Expr.hs') diff --git a/src/Parser/Expr.hs b/src/Parser/Expr.hs index d609e6c..eefc5cc 100644 --- a/src/Parser/Expr.hs +++ b/src/Parser/Expr.hs @@ -136,32 +136,36 @@ list = label "list" $ do let enumErr off = parseError $ FancyError off $ S.singleton $ ErrorFail $ T.unpack $ "list range enumeration not defined for '" <> textExprType x <> "'" - choice + let exprList = foldr (liftA2 (:)) (Pure []) + SomeExpr <$> choice [do symbol "]" - return $ SomeExpr $ fmap (:[]) x + return $ exprList [x] ,do off <- stateOffset <$> getParserState osymbol ".." ExprEnumerator fromTo _ <- maybe (enumErr off) return $ exprEnumerator x y <- typedExpr symbol "]" - return $ SomeExpr $ fromTo <$> x <*> y + return $ fromTo <$> x <*> y ,do symbol "," y <- typedExpr choice - [do off <- stateOffset <$> getParserState + [do symbol "]" + return $ exprList [x, y] + + ,do off <- stateOffset <$> getParserState osymbol ".." ExprEnumerator _ fromThenTo <- maybe (enumErr off) return $ exprEnumerator x z <- typedExpr symbol "]" - return $ SomeExpr $ fromThenTo <$> x <*> y <*> z + return $ fromThenTo <$> x <*> y <*> z ,do symbol "," xs <- listOf typedExpr symbol "]" - return $ SomeExpr $ foldr (liftA2 (:)) (Pure []) (x:y:xs) + return $ exprList (x:y:xs) ] ] -- cgit v1.2.3