I learned a clever hack from Jacques Garrigue: recursive modules allow you to get a module corresponding to a module type. The "module of S" is module rec X : S = X
Using this trick, one can write in c_sig.ml module type S = sig ... end the usual thing in .mli, and then module Make (B : B) = struct module rec S_mod : (Sig.S with type t = B.t) = S_mod include S_mod let not_much_code = assert false end On Tue, Apr 3, 2012 at 1:23 PM, Dawid Toton <d...@wp.pl> wrote: > Consider the following: > > --- a.mli > module type B = sig > type t > end > > module type S = sig > type t > type other_lenghty_definitions > val not_much_code : t > end > > module Make (B : B) : S > with type t = B.t > --- > --- a.ml > module type B = sig > type t > end > > module type S = sig > type t > type other_lenghty_definitions > val not_much_code : t > end > > module Make (B : B) = struct > type t = B.t > type other_lenghty_definitions > let not_much_code = assert false > end > --- > > So we have to keep 3 copies of other_lenghty_definitions. I can have it > isolated in a separate file and insert into a.ml and a.mli in an extra > preprocessing step. But I believe there should be some clean solution, > something like the following: > > --- c_sig.ml > module S = struct > type t > type other_lenghty_definitions > end > > module type S = sig > include (module type of S) (* 1 *) > val not_much_code : t > end > --- > --- c.mli > module type B = sig > type t > end > > module Make (B : B) : C_sig.S > with type t = B.t > --- > --- c.ml > module type B = sig > type t > end > > module Make (B : B) = struct > include C_sig.S > with type t = B.t (* 2 *) > > let not_much_code = assert false > end > --- > > How to do what I mark with (* 1 *) and (* 2 *) correctly? Would it help if I > upgrade my toolchain from 3.11.2 to some more recent version? > Dawid > > -- > Caml-list mailing list. Subscription management and archives: > https://sympa-roc.inria.fr/wws/info/caml-list > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > Bug reports: http://caml.inria.fr/bin/caml-bugs > -- Caml-list mailing list. Subscription management and archives: https://sympa-roc.inria.fr/wws/info/caml-list Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs