Recently, Adam Langley responded so: > On 8/18/07, Matthew Sackman <[EMAIL PROTECTED]> wrote: > > Also, one thing to watch out for is the fact the existing Get and Put > > instances may not do anything like what you expect. For example, for > > some reason I expected that the instances of Get and Put for Float and > > Double would send across the wire Floats and Doubles in IEEE floating > > point standard. How wrong I was... > > Ah, those aren't instances of Get and Put, but of Binary[1]. You use > the Binary instances via the functions 'get' and 'put' (case is > important).
Gah, that'll teach me to post from memory without checking the code. Indeed, that is what I meant, the instances of Binary. > Get and Put provide actions like "putWord32be", for which the > resulting bits are pretty much universally accepted. Binary has > default instances which uses Get and Put to serialise Haskell types > like [Int], or (Float, Float). Here the resulting bits aren't > documented, but you can read the code and I have some C code for > dealing with them somewhere if anyone is interrested. The > serialisation of Float is, indeed, nothing like IEEE in either > endianness. Quite. Whilst we're on the subject (and I realise I might be hijacking this thread a little), it does seem rather odd that it's very easy to take a Word8/16/32/64 and interpret it as an integer. Similarly, it's very easy to take an integer and convert it to a Word of some sort. But it's vastly harder to do that for floats / non-integers. Now I know that the number classes in the Prelude are basically broken anyway and all really need rewriting, but it does seem completely arbitrary that Words somehow are only allowed to contain whole numbers! Matthew _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe