Objective Caml version 3.10.0 # let id a = a;; val id : 'a -> 'a = # let di = id id;; val di : '_a -> '_a = # di 1;; - : int = 1 # di 1.;; This expression has type float but is here used with type int # let di x = (id id) x;; val di : 'a -> 'a = # di 1;; - : int = 1 # di 1.;; - : float = 1.