Skip to content
  • Simon Peyton Jones's avatar
    Fix bug in the short-cut solver · a8fde183
    Simon Peyton Jones authored
    Trac #13943 showed that the relatively-new short-cut solver
    for class constraints (aka -fsolve-constant-dicts) was wrong.
    In particular, see "Type families" under Note [Shortcut solving]
    in TcInteract.
    
    The short-cut solver recursively solves sub-goals, but it doesn't
    flatten type-family applications, and as a result it erroneously
    thought that C (F a) cannot possibly match (C 0), which is
    simply untrue.  That led to an inifinte loop in the short-cut
    solver.
    
    The significant change is the one line
    
    +                 , all isTyFamFree preds  -- See "Type families" in
    +                                          -- Note [Shortcut solving]
    
    but, as ever, I do some other refactoring.  (E.g. I changed the
    name of the function to shortCutSolver rather than the more
    generic trySolveFromInstance.)
    
    I also made the short-cut solver respect the solver-depth limit,
    so that if this happens again it won't just produce an infinite
    loop.
    
    A bit of other refactoring, notably moving isTyFamFree
    from TcValidity to TcType
    a8fde183