
5 Oct
2016
5 Oct
'16
1:05 p.m.
Am 05.10.2016 um 14:32 schrieb Lian Hung Hon:
Given
data Expression = ExpToken String | ExpAnd Expression Expression
How to write an attoparsec parser that parses this example:
"a" and "b" and "c"
into
ExpAnd (ExpToken "a") (ExpAnd (ExpToken "b") (ExpToken "c"))?
You can re-implement `chainr1` from Parsec as follows: chainr1 :: Parser a -> Parser (a -> a -> a) -> Parser a chainr1 p op = scan where scan = p >>= rest rest x = op <*> pure x <*> scan <|> return x Then you just plug in your parsers for variables and the `and` operator. Working example attached. -- Leo