Note [Detailed InertCans Invariants]
The InertCans represents a collection of constraints with the following properties:
* All canonical
* No two dictionaries with the same head
* No two CIrreds with the same type
* Family equations inert wrt top-level family axioms
* Dictionaries have no matching top-level instance
* Given family or dictionary constraints don't mention touchable
unification variables
* Non-CEqCan constraints are fully rewritten with respect
to the CEqCan equalities (modulo eqCanRewrite of course;
eg a wanted cannot rewrite a given)
* CEqCan equalities: see Note [inert_eqs: the inert equalities]
Also see documentation in Constraint.Ct for a list of invariants References 1
- inert_eqs: the inert equalities GHC.Tc.Solver.InertSet
Referenced by 1
- GHC.Tc.Solver.InertSet call site