[GHC] #15276: Bogus type in typechecker error recovery

GHC ghc-devs at haskell.org
Fri Jun 15 07:47:32 UTC 2018


#15276: Bogus type in typechecker error recovery
-------------------------------------+-------------------------------------
           Reporter:  simonpj        |             Owner:  (none)
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:  8.6.1
          Component:  Compiler       |           Version:  8.4.3
           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:
-------------------------------------+-------------------------------------
 If the typechecker sees
 {{{
 let f = <rhs> in <body>
 }}}
 and there's a type error in `<rhs>`, GHC recovers from the error, binds
 `f` to "a type that should cause no more trouble", and continues with
 `<both>` in the hope of finding more type errors.

 What is "a type that should cause no more trouble"?  Well `forall a.a`
 seems like a good candidate.

 But, in this commit
 {{{
 commit 6746549772c5cc0ac66c0fce562f297f4d4b80a2
 Author: Richard Eisenberg <eir at cis.upenn.edu>
 Date:   Fri Dec 11 18:19:53 2015 -0500

     Add kind equalities to GHC.
 }}}
 we made the type look like this: `forall r. forall (a :: TYPE r). a`

 Alas! That type is ill-formed because the kind `TYPE r` escapes the scope
 of `f`.

 I discovered this when beefing up `typeKind` in pursuit of #14939

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


More information about the ghc-tickets mailing list