|
|
|
|
|
by lincolnq
5160 days ago
|
|
Prelude> :t 11111111111111111111111
11111111111111111111111 :: Num a => a
Prelude> :t (length [])
(length []) :: Int
Prelude> 11111111111111111111111111111 - (length [])
1729917383
Prelude> 1111111111111111111111111111 - 0
1111111111111111111111111111
Prelude> 1111111111111111111111111111 - fromIntegral (length [])
1111111111111111111111111111
Prelude> 11111111111111111111111111111 :: Int
1729917383
"Int" is the machine-length integer type. "Integer" is the unbounded, but slower integer type ("bigint" in other languages). In Prelude, "length" always returns an Int, assuming that the length of a list will never be bigger than 232.Haskell interprets numeric literals as the typeclass (Num a => a), meaning any member of the typeclass Num can be constructed using these literals. Int is one such type, and causes wraparound when it constructs an instance using the typeclass. |
|
Should be 2^32, of course. Though I think the real upper bound is (2^31)-1: there's a bit used for negative numbers, and there's zero.