
#14673: Unary Unboxed Tuple Type Constructor -------------------------------------+------------------------------------- Reporter: andrewthad | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 8.4.1-alpha1 Keywords: | Operating System: Unknown/Multiple Architecture: | Type of failure: None/Unknown Unknown/Multiple | Test Case: | Blocked By: Blocking: | Related Tickets: Differential Rev(s): | Wiki Page: -------------------------------------+------------------------------------- The type constructor for a unary unboxed tuple cannot be written in GHC haskell. Consider the following value which is wrapped in by a unary unboxed tuple: {{{
:type (# 5# #) (# 5# #) :: (# Int# #) }}}
Now consider the type constructor for unboxed 2-tuples: {{{
:set -fprint-explicit-kinds :set -fprint-explicit-foralls :kind! (# , #) (# , #) :: forall (k0 :: RuntimeRep) (k1 :: RuntimeRep). TYPE k0 -> TYPE k1 -> TYPE ('TupleRep ((':) RuntimeRep k0 ((':) RuntimeRep k1 ('[] RuntimeRep)))) = (#,#) }}}
Horrid looking, but undoubtedly correct. But how can we do this for a unary unboxed tuple? The naive approach gives us the nullary tuple instead: {{{
:kind! (# #) (# #) :: TYPE ('TupleRep ('[] RuntimeRep)) = (# #) }}}
I do actually have a real use-case for this that I can discuss more if needed. For the syntax, I really haven't the faintest idea what I would expect. Maybe something like: `(## ##)` or `(# @1 #)`, but those both seem pretty bad. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14673 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler