Hello, Look at the following code : module Module : (sig val func : 'a -> 'b end) = struct let func a = a end Here Module.func's type is 'a -> 'a. According to me 'a -> 'a is a subtype of 'a -> 'b, it's 'a -> 'b with 'a = 'b. Nevertheless ocamlc give the following error : Values do not match: val func : 'a -> 'a is not included in val func : 'a -> 'b Why ? I also try to use the reverse match : module Module : (sig val func : 'a -> 'a end) = struct let l = ref [] let func a = List.assoc a !l end Where Module.func is of type 'a -> 'b. Ocamlc also give me an error, but I completely understand it here : 'a -> 'b is really not a subtype of 'a -> 'a. In this case I also don't understand why neither " 'a -> 'b is included in 'a -> 'a " nor " 'a -> 'a is included in 'a -> 'b " are true. To my mind, one should be true. Is it a caml limitation/bug, or am I wrong somewhere ? -- Damien Bobillot