@@ -150,6 +150,18 @@ symbol xs = token (string xs)
150150strToken : Parser String
151151strToken = map pack (token (many1 alphanum))
152152
153+--------------------------------------------------------------------------------
154+-- combinators
155+--------------------------------------------------------------------------------
156+
157+sepBy1 : Parser a -> Parser b -> Parser (List a)
158+sepBy1 p s = map (::) p <$> many (s $> p)
159+
160+sepBy : Parser a -> Parser b -> Parser (List a)
161+sepBy p s = sepBy1 p s <|> return Nil
162+
163+manyTil : Parser a -> Parser b -> Parser (List a)
164+manyTil p e = (e $> return Prelude.List.Nil) <|> (map (::) p <$> manyTil p e)
153165
154166--------------------------------------------------------------------------------
155167-- Expressions