Type classes are a novel combination of parametric polymorphism and constrained types.
Although most implementations restrict type classes to be single-parameter, the generalization
to multi-parameter type classes has gained increasing attention. A problem with multi-parameter
type classes is the increased possibilities they introduce for ambiguity in inferred
types, impacting their usefulness in many practical situations. A new type-checking strategy,
domain-driven unifying resolution, is identified as an approach to solve these problems. Domain-driven
unifying resolution is simple, efficient, and practically useful. However, even with severe
restrictions on instance definitions, it is not possible to guarantee that type-checking with
unifying resolution terminates. This is in contrast with the naive generalization of single
parameter resolution strategies. Domain-driven unifying resolution is guaranteed to terminate
if the type class constraints are satisfiable; however satisfiability is undecidable even with severe
restrictions on instance definitions. These results shed some light on ambiguity problems with
multi-parameter type classes.