From 71992db7d0e51f87934f7d9c0cf9ddbd3a8d0300 Mon Sep 17 00:00:00 2001 From: Mirek Kratochvil Date: Wed, 14 Dec 2022 20:47:29 +0100 Subject: lists --- app/Parser.hs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'app/Parser.hs') diff --git a/app/Parser.hs b/app/Parser.hs index a9e4473..864cdc5 100644 --- a/app/Parser.hs +++ b/app/Parser.hs @@ -145,7 +145,7 @@ instance TraversableStream [Lexeme] where data PAST = Call String [[PAST]] | Seq [PAST] - | List [PAST] (Maybe [PAST]) + | List [[PAST]] (Maybe [PAST]) | Literal String deriving (Show, Eq) @@ -181,7 +181,7 @@ list = do free lBracket choice [ List [] Nothing <$ free rBracket - , do items <- some seqItem + , do items <- splitOn [Literal ","] <$> some seqItem choice [ List items Nothing <$ free rBracket , List items . Just <$> @@ -223,7 +223,8 @@ shuntPrlg :: Ops -> PAST -> ShuntResult shuntPrlg ot = shuntPrlg' (("", Op 0 $ Infix X Y) : ot) shuntPrlg' :: Ops -> PAST -> ShuntResult -shuntPrlg' ot (List _ _) = err "no lists yet" +shuntPrlg' ot (List hs t) = + ListS <$> traverse (shunt ot) hs <*> traverse (shunt ot) t shuntPrlg' ot (Seq ss) = shunt ot ss shuntPrlg' ot (Literal s) = pure (LiteralS s) shuntPrlg' ot (Call fn ss) = CallS fn <$> traverse (shunt ot) ss -- cgit v1.2.3