Hi haskellers,

I'm trying to use buildExpressionParser parser generator from ParsecExpr module of Parsec (http://legacy.cs.uu.nl/daan/download/parsec/parsec.html#ParsecExpr). It works well, except for the "parens" token parser (http://legacy.cs.uu.nl/daan/download/parsec/parsec.html#parens). This code (sample from Expressions part of the manual) typechecks fine:

expr    :: Parser Integer
expr    = buildExpressionParser table factor
        <?> "expression"

table   = [[op "*" (*) AssocLeft, op "/" div AssocLeft]
          ,[op "+" (+) AssocLeft, op "-" (-) AssocLeft]
          ]         
        where
          op s f assoc
             = Infix (do{ string s; return f}) assoc


factor  = do{ char '('
            ; x <- expr
            ; char ')'
            ; return x
            }
        <|> number
        <?> "simple expression"

but if I try to use parens:

factor  = parens expr
        <|> number
        <?> "simple expression"

it fails to typecheck:

Couldn't match expected type `GenTokenParser s u m'
           against inferred type `Parser Integer'
    In the first argument of `parens', namely `expr'
    In the first argument of `(<|>)', namely `parens expr'
    In the first argument of `(<?>)', namely `parens expr <|> number'
Failed, modules loaded: none.

the type of expr infers to GenParser Char () Integer, and the expected type for the parens is GenTokenParser s u m (however, manual introduces it with the type CharParser st a expected)

It seems pretty weird for me, as there are numerous examples of using parens with the buildExpressionParser (e.g. http://blog.moertel.com/articles/2005/08/27/power-parsing-with-haskell-and-parsec) and nobody comments such an error. I know I'm missing something very simple here, maybe someone could help me with it? Thanks in advace

I'm using GHC 6.10.1 and Parsec 3.0.0

--
Regards, Paul Sujkov