Typing.infer;; Typing.infer "hd (cons 1 nil)";; Typing.infer "hd (cons 1 [])";; Typing.pmu;; CoreML.of_string "\\x. x + x";; CoreML.of_string "\\(x.x + x)";; CoreML.of_string "\\x.(x + x)";; CoreML.of_string "\\x.(x +) x";; CoreML.of_string "\\x.(+ x) x";; CoreML.of_string "\\x.+ (x x)";; Typing.to_up;; Typing.to_up (Typing.pmu, CoreML.of_string "hd (cons 1 nil)", Typing.tvar 0);; Typing.pmu;; let up = Typing.to_up (Typing.pmu, CoreML.of_string "hd (cons 1 nil)", Typing.tvar 0);; Typing.unify up;; Typing.infer "hd (cons 1 [])";;