>
Is the behavior I'm seeing actually related to a bug in parsec?
No, I don't think GHC relies on parsec at all.
> Yes or no, why wouldn't it be the default behavior of ghc to load the Decimal package?
Decimal is very inefficient, because it's implemented as a pair of numbers: Word8 to describe a position of a dot, and Integer to describe number itself. E.g., (3.14 :: Decimal) is the same as directly writing (Decimal 2 314).
Integer, unlike Int and Double, is very inefficient for computation-heavy code.
Interesting find!
Ghc (its base library) provides Data.Fixed [0] module with similar purposes to Decimal. Initially I couldn't recommend it, since I thought it has the same Double-related behavior, but when I digged into it now, I found out that it's probably a bug (or a "feature") in "succ" implementation:
λ succ (3.14 :: Fixed E12)
3.140000000001
λ (3.14 :: Fixed E12) + 1
4.140000000000
So, if you don't want to use Decimal, you can just use Data.Fixed (I find Decimal a bit more elegant though).