• Simon Peyton Jones's avatar
    Tidying could cause ill-kinded types · 8bf865d3
    Simon Peyton Jones authored
    I found (Trac #14175) that the tidying we do when reporting
    type error messages could cause a well-kinded type to become
    ill-kinded. Reason: we initialised the tidy-env with a
    completely un-zonked TidyEnv accumulated in the TcLclEnv
    as we come across lexical type-varialbe bindings.
    
    Solution: zonk them.
    
    But I ended up refactoring a bit:
    
    * Get rid of tcl_tidy :: TidyEnv altogether
    
    * Instead use tcl_bndrs :: TcBinderStack
      This used to contain only Ids, but now I've added those
      lexically scoped TyVars too.
    
    * Change names:
         TcIdBinderStack -> TcBinderStack
         TcIdBinder      -> TcBinder
         extendTcIdBndrs -> extendTcBinderStack
    
    * Now tcInitTidyEnv can grab those TyVars from the
      tcl_bndrs, zonk, and tidy them.
    
    The only annoyance is that I had to add TcEnv.hs-boot, to
    break the recursion between the zonking code and the
    TrRnMonad functions like addErrTc that call tcInitTidyEnv.
    Tiresome, but in fact that file existed already.
    8bf865d3
TcErrors.hs 124 KB