See HindleyMilnerTypeInference.