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 (# | (# #) #)))
|