Int はオーバーフローを起こす。
Prelude> :set +t
Prelude> (2 :: Int) ^ (32 :: Int)
0
it :: Int
Prelude> (2 :: Int) ^ (31 :: Int)
-2147483648
it :: Int
Integer はオーバーフローを起こさない。
Prelude> (2 :: Integer) ^ (31 :: Integer)
2147483648
it :: Integer
Prelude> (2 :: Integer) ^ (32 :: Integer)
4294967296
it :: Integer
Prelude> (2 :: Integer) ^ (64 :: Integer)
18446744073709551616
it :: Integer
Integer はメモリの許す限りオーバーフローを起こさない。
Prelude> (2 :: Integer) ^ (128 :: Integer)
340282366920938463463374607431768211456
it :: Integer
Prelude> (2 :: Integer) ^ (256 :: Integer)
115792089237316195423570985008687907853269984665640564039457584007913129639936
it :: Integer