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 2
32.
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.