Unary Unboxed Tuple Type Constructor
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.
Trac metadata
Trac field | Value |
---|---|
Version | 8.4.1-alpha1 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |