At the bottom of the Hackage documentation for Text.Megaparsec.Expr [1] is a 13-line demonstration program. It includes no import statements. I added the ones I could deduce, which produced this:
import Text.Megaparsec
import Text.Megaparsec.Expr
import Text.Megaparsec.Lexer (symbol,integer)
parens = between (symbol "(") (symbol ")")
expr = makeExprParser term table <?> "expression"
term = parens expr <|> integer <?> "term"
table = [ [ prefix "-" negate
, prefix "+" id ]
, [ postfix "++" (+1) ]
, [ binary "*" (*)
, binary "/" div ]
, [ binary "+" (+)
, binary "-" (-) ] ]
binary name f = InfixL (reservedOp name >> return f)
prefix name f = Prefix (reservedOp name >> return f)
postfix name f = Postfix (reservedOp name >> return f)
That still won't compile, because GHC does not know what reservedOp means. Does reservedOp refer to something that no longer exists, or have I just not found it?
--