<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