[Haskell-cafe] parsing long numbers

Niklas Broberg niklas.broberg at gmail.com
Fri Sep 15 09:51:54 EDT 2006


> The problem is that, when I run it with strings containing a number
> more then 10 digit long, I get unexpected integers back:
>
> *Main> runP number1 "1234567890 and the rest"
> [(1234567890," and the rest")]
> *Main> runP number1 "12345678901 and the rest"
> [(-539222987," and the rest")]

This has nothing to do with your parser, but with the representation
you use. The Int type is bounded by

Prelude> maxBound :: Int
2147483647

i.e. that's the highest value of Int you could get. So if you just write

Prelude> 12345678901 :: Int
-539222987

you see that you have the same "problem". The solution is to use the
unbounded type Integer instead of the bounded type Int.

Cheers,

/Niklas


More information about the Haskell-Cafe mailing list