[GHC] #12985: GHCi incorrectly reports the kind of unboxed tuples spliced in from Template Haskell

GHC ghc-devs at haskell.org
Thu Dec 15 15:09:38 UTC 2016


#12985: GHCi incorrectly reports the kind of unboxed tuples spliced in from
Template Haskell
-------------------------------------+-------------------------------------
           Reporter:  RyanGlScott    |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Template       |           Version:  8.0.2
  Haskell                            |
           Keywords:                 |  Operating System:  Unknown/Multiple
       Architecture:                 |   Type of failure:  Other
  Unknown/Multiple                   |
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:  #12976
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 First noticed in #12976. 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
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12985>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list