<digit> ::= '0'-'9' <number> ::= ('-' / '+')? <digit>+
digit :: Parser Char digit = sat isDigit number :: Parser Integer number = do o <- string "+" <|> string "-" <|> return [] s <- some digit return $ value o s where value "+" s = read (s)::Integer value o s = read (o++s)::Integer
By googo