3 ms·
Prelude> :t 11111111111111111111111 11111111111111111111111 :: Num a => a Prelude> :t (length []) (length []) :: Int Prelude> 111111111111111111
by lincolnq 15y 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.
- zopa 15y agoassuming that the length of a list will never be bigger than 232 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.