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 |