Skip to content
  • Simon Peyton Jones's avatar
    Instances in no-evidence implications · 32eb4199
    Simon Peyton Jones authored
    Trac #15290 showed that it's possible that we might attempt to use a
    quantified constraint to solve an equality in a situation where we
    don't have anywhere to put the evidence bindings.  This made GHC crash.
    
    This patch stops the crash, but still rejects the pogram.  See
    Note [Instances in no-evidence implications] in TcInteract.
    
    Finding this bug revealed another lurking bug:
    
    * An infelicity in the treatment of superclasses -- we were expanding
      them locally at the leaves, rather than at their binding site; see
      (3a) in Note [The superclass story].
    
      As a consequence, TcRnTypes.superclassesMightHelp must look inside
      implications.
    
    In more detail:
    
    * Stop the crash, by making TcInteract.chooseInstance test for
      the no-evidence-bindings case.  In that case we simply don't
      use the instance.  This entailed a slight change to the type
      of chooseInstance.
    
    * Make TcSMonad.getPendingScDicts (now renamed getPendingGivenScs)
      return only Givens from the /current level/; and make
      TcRnTypes.superClassesMightHelp look inside implications.
    
    * Refactor the simpl_loop and superclass-expansion stuff in
      TcSimplify.  The logic is much easier to understand now, and
      has less duplication.
    32eb4199