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
next 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