@@ -150,6 +150,21 @@ symbol xs = token (string xs)
150strToken : Parser String
150strToken : Parser String
151strToken = map pack (token (many1 alphanum))
151strToken = map pack (token (many1 alphanum))
153+--------------------------------------------------------------------------------
155+--------------------------------------------------------------------------------
157+optional : Parser a -> Parser ()
158+optional p = (p $> pure ()) <|> pure ()
160+sepBy1 : Parser a -> Parser b -> Parser (List a)
161+sepBy1 p s = [| p :: many (s $> p) |]
163+sepBy : Parser a -> Parser b -> Parser (List a)
164+sepBy p s = sepBy1 p s <|> pure Nil
166+manyTil : Parser a -> Parser b -> Parser (List a)
167+manyTil p e = (e $> pure Nil) <|> [| p :: manyTil p e |]
154--------------------------------------------------------------------------------
169--------------------------------------------------------------------------------
155-- Expressions
170-- Expressions