
#9035: ghci sometimes displays Word32 as Word64 ------------------------------------------------+-------------------------- Reporter: MikeIzbicki | Owner: Type: bug | Status: closed Priority: normal | Milestone: Component: GHCi | Version: 7.8.2 Resolution: invalid | Keywords: Operating System: Linux | Architecture: x86_64 Type of failure: Incorrect result at runtime | (amd64) Test Case: | Difficulty: Blocking: | Unknown | Blocked By: | Related Tickets: ------------------------------------------------+-------------------------- Comment (by MikeIzbicki): Replying to [comment:2 igloo]:
This use of `unsafeCoerce` is not safe: See [http://www.haskell.org/ghc/docs/latest/html/libraries/base-4.7.0.0 /Unsafe-Coerce.html this] which links to [http://www.haskell.org/ghc/docs/latest/html/libraries/ghc-prim-0.3.1.0 /GHC-Prim.html#v:unsafeCoerce-35- here] for more details.
I don't understand why it is incorrect. Is it because the float is boxed? We can easily change the code to: {{{ float2word32 :: Float -> Word32 float2word32 (F# f#) = W32# (unsafeCoerce# f#) }}} Now, we are casting between two unboxed types of the same size, which is explicitly allowed. The results, however, are exactly the same as before. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/9035#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler