Hello, I have yet another question: what idea stays belong the fact that code works (OCaml 4.04) module M = struct let f v = v+1 module MM = struct let ff (module R: I) v = R.f v end let t v = MM.ff (module M: I) 0 end;; and that code does not compile module T = struct let f ff = ff (module T: I) 0 end;; ? I understand why second script is wrong but why the first script works? WBR, ssp