
On Tuesday 11 May 2010 19:45:42, Stephen Tetley wrote:
An Int8 is a bit more problematic
Not really, the Binary instances for IntN just use fromIntegral to convert between IntN and WordN before serialising/after deserialising a WordN. Now, it's not written in the language definition that fromIntegral should be a reinterpretation of the bit-pattern for these conversions, but I think you can pretty much rely on that. What might be a problem for the unwary are the instance for Int and Word (guess what they do and why).
I wouldn't like to rely on it for inter-working between Haskell and C.
Int8 and Word8 are unproblematic (unless you have a ones-complement machine), the problems appear only for larger types, as there's no guarantee whether your architecture is big-endian or little-endian. But if you know that, you know what to do on the C end.
For floating point numbers - representations are quite likely to diverge, one would hope any good protocol would pick a proper representation (e.g. IEEE-754).
Data.Binary is a "Standard Library" so any Haskell compiler should use the same code and produce the same binary layout.
Best wishes
Stephen