Is the behavior I'm seeing actually related to a bug in parsec?
If you're interested in digging deeper, I'd say look at the output, not the input end. Almost certainly the machine floating-point double for 3.14 and (3.14+1.0) are identical across ghc, C, and python.
What's not identical is how different languages choose to display 4.14.
C and python do some display rounding so you don't see the issue. The display algorithm in Haskell probably goes for the simple, naive approach.