
There's a bit of work required to make this code good enough for general consumption, and I don't know much about Haskell internals. (1) What is the "official" way to find the size of a word? A quick look at 6.8.1's base/GHC/Num.lhs reveals that it uses a #defined symbol. (2) Is it safe to assume an underlying implementation based on GMP? (In Num.lhs there is an alternative definition for .NET. Is that ever used?) Is it safe to assume the size of a GMP "limb" is the same as the word size? (I'm assuming it is for now.) David said:
I've attached a program with two QuickCheck properties. Unfortunately they fail on negative Integers. I can't figure out why.
Judging by Num.lhs, the sign of the Integer is stored as the sign of the length of the Integer in "limbs". The code needs to deal with that explicitly, as well as doing some bounds checking on the index. Anyway, if someone can help with those questions I can try to write a bulletproof version of the code. -- Dan