Skip to content
  • Simon Peyton Jones's avatar
    Improve error recovery in the typechecker · 4927117c
    Simon Peyton Jones authored and Marge Bot's avatar Marge Bot committed
    Issue #16418 showed that we were carrying on too eagerly after a bogus
    type signature was identified (a bad telescope in fact), leading to a
    subsequent crash.
    
    This led me in to a maze of twisty little passages in the typechecker's
    error recovery, and I ended up doing some refactoring in TcRnMonad.
    Some specfifics
    
    * TcRnMonad.try_m is now called attemptM.
    
    * I switched the order of the result pair in tryTc,
      to make it consistent with other similar functions.
    
    * The actual exception used in the Tc monad is irrelevant so,
      to avoid polluting type signatures, I made tcTryM, a simple
      wrapper around tryM, and used it.
    
    The more important changes are in
    
    * TcSimplify.captureTopConstraints, where we should have been calling
      simplifyTop rather than reportUnsolved, so that levity defaulting
      takes place properly.
    
    * TcUnify.emitResidualTvConstraint, where we need to set the correct
      status for a new implication constraint.  (Previously we ended up
      with an Insoluble constraint wrapped in an Unsolved implication,
      which meant that insolubleWC gave the wrong answer.
    4927117c