[Haskell-cafe] Parsec: buildExpressionParser of a different type
than parsed term
Albert Y. C. Lai
trebla at vex.net
Mon Apr 9 19:19:17 EDT 2007
Joel Reymont wrote:
> I'm trying to parse NumExpr > NumExpr (example) which should return a
> logical expression while parsing numeric terms. I can't figure out how
> to make buildExpressionParser do this for me since it takes the type of
> the term parser given to it. If I supply a parser for numeric terms then
> I cannot return a logical expression.
[...]
> Note that I do not want to put all expressions into the same Expr type
> since it makes generating valid random ASTs with QuickCheck impossible.
As you probably suspect, one single use of buildExpressionParser cannot
accomplish it. It is equivalent to the problem of homogeneous lists.
However, you can make two uses of buildExpressionParser, one for numeric
expressions and the other for logical expressions. Mutual reference is
no problem since, in all practical uses, even with just one single
buildExpressionParser you already have the term parser call its own
buildExpressionParser; now you just have one term parser call the
other's buildExpressionParser. Sharing the same token parser is
perfectly alright.
More information about the Haskell-Cafe
mailing list