Hindley-Milner type systems