
...and I don't think it's entirely given that two 64 bit numbers will be faster than one Integer.
I do. the implementation of Integer requires traversing additional indirections to an array of bits, reading the size of the operands, allocating space for the result, etc. It's a lot of work even if the arguments and result are simple values like 0 or 1.
I'm not sure I believe that. Compare: data T = T Int64 Int64 newtype T = T Integer In pure space terms, with GHC, the first rep takes 9 words. The second probably takes 8 words, assuming 3 words for the integer value. The second version is probably faster at most things, too. The fastest representation would be data T = T !Int64 !Int64 and compile with -funbox-strict-fields to remove two indirections and two unnecessary bottoms in the domain. Nevertheless, I still think this is all moot. Cheers, Simon