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
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users

Reply via email to