Type Inference as Constraint Satisfaction
Each use of a value or function may impose a constraint on the type of an expression that includes it or that is an argument to it.
By propagating constraints, it is sometimes possible to establish a unique type for every expression that occurs in some larger expression.