summaryrefslogtreecommitdiff
path: root/testsuite/tests/unboxedsums/unboxedsums6.hs
blob: 78c9f393504bfb24802a49f3d1f1b8d17d0a94df (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
34
35
{-# LANGUAGE UnboxedSums, MagicHash, UnboxedTuples #-}

-- Nesting sums and tuples is OK

module Main where

import GHC.Exts
import GHC.Types

import System.Mem (performMajorGC)

type S_T_T a b c d = (# (# a , b #) | (# c , d #) #)
type S_S_S a b c d = (# (# a | b #) | (# c | d #) #)

show_stt :: (Show a, Show b, Show c, Show d) => S_T_T a b c d -> String
show_stt (# (# a, b #) | #) = show a ++ show b
show_stt (# | (# c, d #) #) = show c ++ show d

show_sss :: (Show a, Show b, Show c, Show d) => S_S_S a b c d -> String
show_sss (# (# a | #) | #) = show a
show_sss (# (# | b #) | #) = show b
show_sss (# | (# c | #) #) = show c
show_sss (# | (# | d #) #) = show d

main :: IO ()
main = do
    putStrLn (show_stt stt)
    putStrLn (show_sss sss)
    performMajorGC
  where
    stt :: S_T_T Int Bool Float String
    stt = (# (# 123, True #) | #)

    sss :: S_S_S Int Bool Float String
    sss = (# | (# 1.2 | #) #)