Implement unboxed sum primitive type
[ghc.git] / testsuite / tests / unboxedsums / unboxedsums2.hs
1 {-# LANGUAGE UnboxedSums, MagicHash, BangPatterns #-}
2
3 module Main where
4
5 import GHC.Prim
6 import GHC.Types
7
8 -- Code generator used to fail with illegal instruction errors when Float# is
9 -- involved.
10
11 toInt :: (# Int# | Float# #) -> Int#
12 toInt (# i | #) = i
13 toInt (# | f #) = let !(I# i) = ceiling (F# f) in i
14
15 toFloat :: (# Int# | Float# #) -> Float#
16 toFloat (# i | #) = let !(F# f) = fromIntegral (I# i) in f
17 toFloat (# | f #) = f
18
19 data D = D { f1 :: (# Int# | Float# #) }
20
21 instance Show D where
22 show (D (# i | #)) = "D " ++ show (I# i)
23 show (D (# | f #)) = "D " ++ show (F# f)
24
25 main :: IO ()
26 main = do
27 !(F# f) <- readLn
28 print (I# (toInt (# | f #)))
29
30 !(I# i) <- readLn
31 print (F# (toFloat (# i | #)))
32
33 print (D (# | f #))
34 print (D (# i | #))