Hindley Milner Type Inference