
fact 0 = 1 fact n = n * fact (n-1)
Now I ran it as fact 1000000 with signature Int -> Int and with Integer -> Integer
In the first case I got 0 in about 3 seconds [...] And if that sounds like a unreal argument, consider representing and storing Graham's number.
So, since computers are finite anyway, we can just arbitrarily (well, almost) redefine large constants, and set all factorials above some threshold to zero? Perhaps we should also set pi=3, that would simplify lots of things :-)
Pragmatically: 32-bits is unwise for a bank-balance, 64 should be a bit more safe
Please start a bank using modulo arithmetic, I'm looking forward to overdrafting my account!
So yes, Haskell's Int, should have been called FastInt or Int29 or somethin'
On a more serious note, I accept that Int (and other limited precision numbers) is a fact of life, and sometimes useful for performance reasons. I would have liked, however, to have a compiler option or some other way to make my programs throw an exception on overflow - even if this turned out to be slower, I could at least use it when testing my programs, which would have caught a few bugs. -k -- If I haven't seen further, it is by standing in the footprints of giants