GHCi incorrectly reports the kind of unboxed tuples spliced in from Template Haskell
First noticed in #12976 (closed). First, fire up GHCi 8.0.2 (or HEAD) and enable some options:
$ inplace/bin/ghc-stage2 --interactive
GHCi, version 8.1.20161208: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/rgscott/.ghci
λ> :set -fprint-explicit-runtime-reps -fprint-explicit-kinds -fprint-explicit-foralls -XUnboxedTuples -XTemplateHaskell -XMagicHash
λ> :m + GHC.Exts Language.Haskell.TH Language.Haskell.TH.Lib Language.Haskell.TH.Syntax
Next, try looking at the kind of a regular unboxed tuple:
λ> :k (#,#)
(#,#) :: forall (a :: RuntimeRep) (b :: RuntimeRep).
TYPE a -> TYPE b -> TYPE 'UnboxedTupleRep
But when you splice in the unboxed tuple type constructor via Template Haskell, :k misbehaves:
λ> :k $(unboxedTupleT 2)
$(unboxedTupleT 2) :: * -> * -> TYPE 'UnboxedTupleRep
This kind is totally wrong, since you //can// in fact apply this type constructor to types with kinds other than *:
λ> :k $(unboxedTupleT 2) Int# Int#
$(unboxedTupleT 2) Int# Int# :: TYPE 'UnboxedTupleRep
Moreover, this appears to be a regression since GHC 8.0.1, since if you try this in GHCi 8.0.1:
$ /opt/ghc/8.0.1/bin/ghci
GHCi, version 8.0.1: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/rgscott/.ghci
λ> :set -fprint-explicit-runtime-reps -fprint-explicit-kinds -fprint-explicit-foralls -XUnboxedTuples -XTemplateHaskell -XMagicHash
λ> :m + GHC.Exts Language.Haskell.TH Language.Haskell.TH.Lib Language.Haskell.TH.Syntax
λ> :k $(unboxedTupleT 2)
$(unboxedTupleT 2) :: forall (a :: RuntimeRep) (b :: RuntimeRep).
TYPE a -> TYPE b -> TYPE 'UnboxedTupleRep
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Template Haskell |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |