
Aha. I had forgotten some details. If you want to have an operator that is a prefix of another operator in the
table, use the following (or similar) wrapper instead of plain symbol: op n = (lexeme . try) (string n <* notFollowedBy punctuationChar)
http://hackage.haskell.org/package/megaparsec-5.1.1/docs/Text-Megaparsec-Exp...
So you actually need to be a little clever for those two operators to work;
it's not as simple as I had recalled it (which would have been correct for
a basic manual combinator setup). I am going to guess that something in
there is not using `try` and silently consuming the extra "#", but I'd have
to study the `makeExprParser` code in Megaparsec to be certain.
On Sun, Oct 23, 2016 at 5:38 PM, Jeffrey Brown
Thanks, Brandon! How did you know that?
I changed them to "#1" and "#2" and now it works[1].
But before making that change, why would "a # b ## c # d" evaluate, even though "a ## b" would not?
[1] https://github.com/JeffreyBenjaminBrown/digraphs- with-text/tree/master/howto/megaparsec The corrected file is called "experim.hs"; the old one, uncorrected, is called "experim.buggy.hs".
On Sun, Oct 23, 2016 at 2:03 PM, Brandon Allbery
wrote: On Sun, Oct 23, 2016 at 4:15 PM, Jeffrey Brown
wrote: [ [ InfixN # symbol "#" *> pure (Pair) ] , [ InfixN # symbol "##" *> pure (Pair) ] ]
Combinator parsers can't rearrange themselves to do longest token matching. So the ## operator will take the first case, match against `symbol "#"` and aOperator will succeed; the the next token match will hit the unconsumed "#" and fail. If you place "##" first then it will match "##" but not "#", which would the match the second rule.
-- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net
-- Jeff Brown | Jeffrey Benjamin Brown Website https://msu.edu/~brown202/ | Facebook https://www.facebook.com/mejeff.younotjeff | LinkedIn https://www.linkedin.com/in/jeffreybenjaminbrown(I often miss messages here) | Github https://github.com/jeffreybenjaminbrown
-- brandon s allbery kf8nh sine nomine associates allbery.b@gmail.com ballbery@sinenomine.net unix, openafs, kerberos, infrastructure, xmonad http://sinenomine.net