Hindley-Milner Type Inference