The current instance used 0 for salt -- why not use given salt instead?
The foldlChunks gets inlined when given two arguments, which results in a small gain as more unwrapping happens.
Previously, 0 and 1 was used. The constant 0x55555555 is in binary 01010101010101010101010101010101. It is simple to see that 0x55555555 = 0xFFFFFFFF `quot` 3. Therefore, the constant is computed as (maxBound :: Word) `quot` 3, so it is 64-bit wide on 64-bit architectures.
When using integer-gmp, we can get our hands on the ByteArray# representing the Integer, and use hashByteArrayWithSalt. Nevertheless, care must be taken -- Integers are represented * using S# Int#, if the Integer fits into Int# * using J# size byteArray, both when the Integer does and does not fit into Int# Same numbers must have same hash even if they are represented differently, so if an 32-bit Integer is represented using J# constructor, we still hash it as if it was represented using S#.