All pastes #26200 Raw Edit

Untitled

public text v1 · immutable
#26200 ·published 2005-10-21 19:44 UTC
rendered paste body
ghc --make expre.hs -o expre
Chasing modules from: expre.hs
Compiling Main             ( expre.hs, expre.o )

expre.hs:29:
    Couldn't match `IO' against `Either ParseError'
        Expected type: IO a
        Inferred type: Either ParseError a1
    In the application `parse expr "test" "1+2*3"'
    In the second argument of `(=<<)', namely
        `parse expr "test" "1+2*3"'


the source was 
import Text.ParserCombinators.Parsec
import Text.ParserCombinators.Parsec.Expr

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"

number  :: Parser Integer
number  = do{ ds <- many1 digit
            ; return (read ds)
            }
        <?> "number"

main = print =<< parse expr "test" "1+2*3" -- '*' has higher priority