On Monday 20 September 2010 06:47:12, John Millikin wrote: > On Sun, Sep 19, 2010 at 21:43, Patrick Perry <patpe...@gmail.com> wrote: > >> I needed "real" IEEE754 binary support for round-trip parsing, where > >> (for example) maintaining the particular bit pattern of a NaN is > >> important. For 99% of people, the "unsafe" method will work fine. > > > > How does a C-style cast not preserve the bit pattern of a NaN? Again, > > sorry if this is a stupid question. > > It's not a stupid question, and I don't know the answer. But if you > plug a C-style cast into the data-binary-ieee754 unit tests, some of > them (the fiddly ones, like roundtripping -NaN) will fail. Presumably, > this is due to some optimization deep in the bowels of GHC, but I > don't understand even a fraction of what goes on in there. > > For what it's worth, d-b-ieee754 was the very first Haskell library I > ever wrote -- and it shows. If anybody knows how to make unsafeCoerce > (or equivalent) roundtrip-safe, I would love to rip out all the ugly > and make it sane.
unsafeCoerce is not supposed to work for casts between Integral and Floating types. If you try to unsafeCoerce# between unboxed types, say Double# and Word64#, you're likely to get a compile failure (ghc panic). If you unsafeCoerce between the boxed types, it will probably work, but there are no guarantees. There's a feature request for unboxed coercion (i.e. reinterpretation of the bit-pattern): http://hackage.haskell.org/trac/ghc/ticket/4092 _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe