[GHC] #13959: substTyVar's definition is highly dubious

GHC ghc-devs at haskell.org
Thu Jul 20 14:49:19 UTC 2017


#13959: substTyVar's definition is highly dubious
-------------------------------------+-------------------------------------
        Reporter:  RyanGlScott       |                Owner:  (none)
            Type:  bug               |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.0.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D3732
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by simonpj):

 Just to add: Rule (+) means that the following program is illegal:
 {{{
 forall (k:*). forall (a:k).
    forall (k:*->*).
       a
 }}}
 Note the shadowing: there are really two k's.   It's illegal according to
 (+) because bringing the inner `k` into scope makes `a` (as well as the
 outer `k`) fall out of scope, because `a`'s kind mentions `k`.

 Why this rule?  Because in the implementation we have kinds on every
 variable occurrence, and the kind on an occurrence should match that on
 the binder.  So
 {{{
 forall (a:*).  (a:*) -> Int
 }}}
 is fine, but
 {{{
 forall (a:*). T (a:*->*)
 }}}
 is not, because the kind on `a`'s occurrence doesn't match that at its
 binding site.  And Rule (+) makes this illegal too:
 {{{
 forall (k:*). forall (a:k).
    forall (k:*->*).
       (a:k)
 }}}
 because the kind at `a`'s occurrence is a different `k` to that at its
 binding site.

 Another way to say it is that `typeKind` (and `exprType`) yield sane
 results.

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


More information about the ghc-tickets mailing list