
Dear GHC users I've just discovered something very peculiar with unboxed tuples in GHC. f2 x = (# True, False #) f1 x = (# True #) f0 x = (# #) What types do these functions have? f2 :: a -> (# Bool, Bool #) f1 :: a -> (# Bool #) BUT f0 :: a -> b -> (# b #) I think this is stupid. It should be f0 :: a -> (# #) But in fact even that type isn't what you expect (ie the analogue of f :: a -> () ) Here are the kinds of the type constructors: (,,) :: * -> * -> * -> * (,) :: * -> * -> * () :: * (# ,, #) :: * -> * -> * -> # (# , #) :: * -> * -> # BUT (# #) :: * -> # In both respects unboxed unit tuples are behaving differently to boxed ones. This seems bonkers. I propose to fix this, but I wanted to check if anyone is relying on the current odd behaviour. Simon