A Hindley-Milner type inference implementation in Prolog