The rules are these:
1 The Paterson Conditions: for each class constraint (C t1 ... tn) in the context
1 No type variable has more occurrences in the constraint than in the head
2 The constraint has fewer constructors and variables (taken together and counting repetitions) than the head
3 The constraint mentions no type functions. A type function application can in principle expand to a type of arbitrary size, and so are rejected out of hand
2 The Coverage Condition. For each functional dependency, ⟨tvs⟩left -> ⟨tvs⟩right, of the class, every type variable in S(⟨tvs⟩right) must appear in S(⟨tvs⟩left), where S is the substitution mapping each type variable in the class declaration to the corresponding type in the instance head.