Note [Prioritise class equalities]
We prioritise equalities in the solver (see selectWorkItem). But class constraints like (a ~ b) and (a ~~ b) are actually equalities too; see Note [The equality types story] in GHC.Builtin.Types.Prim. Failing to prioritise these is inefficient (more kick-outs etc). But, worse, it can prevent us spotting a "recursive knot" among Wanted constraints. See comment:10 of #12734 for a worked-out example. So we arrange to put these particular class constraints in the wl_eqs. NB: since we do not currently apply the substitution to the inert_solved_dicts, the knot-tying still seems a bit fragile. But this makes it better.
References 1
- The equality types story GHC.Builtin.Types.Prim
Referenced by 3
- GHC.Tc.Solver.InertSet call site ×2
- Prioritise equalities GHC.Tc.Solver.InertSet