summaryrefslogtreecommitdiff
path: root/testsuite/tests/unboxedsums/unboxedsums3.hs
blob: add8aa73dfba78225683ae7743c6b2c32c09fb1e (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
27
28
29
30
31
32
33
{-# LANGUAGE UnboxedSums, MagicHash, BangPatterns, UnboxedTuples #-}

module Main where

import GHC.Prim
import GHC.Types

import Data.Void (Void)
import System.Mem (performMajorGC)

showAlt0 :: (# Void# | (# #) | () #) -> String
showAlt0 (# | (# #) | #) = "(# | (# #) | #)"
showAlt0 (# | | () #) = "(# | | () #)"

showAlt1 :: (# Void | Float# #) -> String
showAlt1 (# _ | #) = "(# Void | #)"
showAlt1 (# | f #) = "(# | " ++ show (F# f) ++ "# #)"

data D = D { f1 :: (# Void# | (# #) | () #)
           , f2 :: (# Void | Float# #)
           }

showD :: D -> String
showD (D f1 f2) = showAlt0 f1 ++ "\n" ++ showAlt1 f2

main :: IO ()
main = do
    putStrLn (showAlt0 (# | (# #) | #))
    putStrLn (showAlt0 (# | | () #))
    putStrLn (showAlt1 (# undefined | #))
    putStrLn (showAlt1 (# | 8.1# #))
    putStrLn (showD (D (# | (# #) | #) (# | 1.2# #)))
    performMajorGC