ghci sometimes displays Word32 as Word64
Given this code:
module Main
where
import Data.Word
import Unsafe.Coerce
import System.IO
nanFloat :: Float
nanFloat = unsafeCoerce (maxBound :: Word32)
float2word32 :: Float -> Word32
float2word32 = unsafeCoerce
nanDouble :: Double
nanDouble = unsafeCoerce (maxBound :: Word64)
double2word64 :: Double -> Word64
double2word64 = unsafeCoerce
main = do
putStrLn $ "nanFloat = " ++ show (float2word32 nanFloat)
putStrLn $ "nanFloat = " ++ show (float2word32 $ nanFloat + 1)
putStrLn $ "nanDouble = " ++ show (double2word64 nanDouble)
putStrLn $ "nanDouble = " ++ show (double2word64 $ nanDouble + 1)
If we compile with GHC and run, we correctly output:
nanFloat = 4294967295
nanFloat = 4294967295
nanDouble = 18446744073709551615
nanDouble = 18446744073709551615
But if we instead load in ghci, we get the following output:
nanFloat = 4294967295
nanFloat = 140247862083583
nanDouble = 18446744073709551615
nanDouble = 18446744073709551615
For some reason, ghci is displaying (nanFloat+1) as having significantly more digits than can possibly stored in a Word32 value.
Test system: Intel Core 2 Duo running Debian with GHC 7.8.2
Trac metadata
Trac field | Value |
---|---|
Version | 7.8.2 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | GHCi |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | hvr |
Operating system | |
Architecture |