summaryrefslogtreecommitdiff
path: root/testsuite/tests/unboxedsums/unboxedsums9.hs
blob: 79927fc58b00bee2be3a2f160d8f8d73a8d5cf03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{-# LANGUAGE UnboxedSums, UnboxedTuples, MagicHash #-}

module Main where

type UbxBool = (# (# #) | (# #) #)

{-# NOINLINE packBool #-}
packBool :: UbxBool -> Bool
packBool (# _ | #) = True
packBool (# | _ #) = False

{-# NOINLINE unpackBool #-}
unpackBool :: Bool -> UbxBool
unpackBool True  = (# (# #) | #)
unpackBool False = (# | (# #) #)

{-# NOINLINE showUbxBool #-}
showUbxBool :: UbxBool -> String
showUbxBool b = show (packBool b)

main :: IO ()
main = do
  putStrLn (showUbxBool (unpackBool True))
  putStrLn (showUbxBool (unpackBool False))
  putStrLn (show (packBool (# (# #) | #)))
  putStrLn (show (packBool (# | (# #) #)))