@@ -150,6 +150,21 @@ symbol xs = token (string xs)
150150strToken : Parser String
151151strToken = map pack (token (many1 alphanum))
152152
153+--------------------------------------------------------------------------------
154+-- combinators
155+--------------------------------------------------------------------------------
156+
157+optional : Parser a -> Parser ()
158+optional p = (p $> pure ()) <|> pure ()
159+
160+sepBy1 : Parser a -> Parser b -> Parser (List a)
161+sepBy1 p s = [| p :: many (s $> p) |]
162+
163+sepBy : Parser a -> Parser b -> Parser (List a)
164+sepBy p s = sepBy1 p s <|> pure Nil
165+
166+manyTil : Parser a -> Parser b -> Parser (List a)
167+manyTil p e = (e $> pure Nil) <|> [| p :: manyTil p e |]
153168
154169--------------------------------------------------------------------------------
155170-- Expressions