Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: pbrisset@eis.enac.dgac.fr
To: caml-list@margaux.inria.fr
Subject: One more question about the module system
Date: Mon, 25 Mar 1996 18:22:09 +0100	[thread overview]
Message-ID: <199603251721.SAA25211@concorde.inria.fr> (raw)


Here is my problem:

I have a program implemented in several files (say m.ml, m1.ml and m2.ml).
This program depends on a module L and the dependency is expressed
using the .mli/open mechanism. So I have:

	(* m.ml *)
	open L
	open M1
	...

	(* m1.ml *)
	open L
	open M2
	...

	(* m2.ml *)
	open L
	...

I want to transform this program in order to have a functor of argument L
(i.e. I want to use twice my program with two different module L's). So
I want to be able to write (in a main.ml):

	module ML1 = M(L1)
	module ML2 = M(L2)
	...

 where M is the functor.

I use the following idea: because my different (implicit) modules
depend on L, I have to translate them into (explicit) functors. Then, I
apply the functors for m1.ml and m2.ml in the main module defined in m.ml.
The m1.ml module can no longer include an "open M2" since M2 is a functor:
m1.ml have to speak about M2 through the instantiation of M2 done in M.
So I start to write:

	(* m.mli *)
	module type L = ...
	module M(X : L) :
	  sig
	    module M1 : sig ... X.t ... end
	    module M2 : sig ... X.t ... end
	    val main : ...
	  end

	(* m.ml *)
	module M(X : L) =
	  struct
	    module M1 = M1.Make(X)
	    module M2 = M2.Make(X)
	    (* previous m.ml *)
	    let main = ...
          end

	(* m1.mli *)
	module type L = ...
	module Make(X : L) :
	  sig
	    type t1 = ...
	    val v1 : M.M(X).M2.t2
	    ...
	  end

	(* m2.mli *)
	module type L = ...
	module Make(X : L) :
	  sig
	    type t2 = ...
	    val v2 : ...
          end

For these files, it is OK but I cannot write m1.ml :

	(* m1.ml *)
	module type L = ...
	module Make(X : L) =
	  struct
	    (* previous m1.ml *)
	    let v1 = ... M.M(X).M2.v2 ...
                         ^^^^^^^^^^^^
	  end

The underlined expression is not valid. So my idea does not work.

Any hint to "functorize" my package ?


--------------
Pascal Brisset
ENAC, 7 avenue Edouard Belin, BP 4005, F-31055 Toulouse Cedex, France
Tel: +33 62 17 40 53, E-mail: pbrisset@eis.enac.dgac.fr, Fax: +33 62 17 41 43





             reply	other threads:[~1996-03-27 10:02 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1996-03-25 17:22 pbrisset [this message]
1996-03-28 14:16 ` Xavier Leroy
1996-03-29 14:10 pbrisset

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=199603251721.SAA25211@concorde.inria.fr \
    --to=pbrisset@eis.enac.dgac.fr \
    --cc=caml-list@margaux.inria.fr \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox