From: "Pierre CREGUT - FT . BD/CNET/DTL/MSV" <pierre.cregut@cnet.francetelecom.fr>
To: caml-list@inria.fr
Subject: Parameterized signatures needed ?
Date: Mon, 13 Sep 1999 12:25:32 +0200 [thread overview]
Message-ID: <19990913122532.A4032@lsun605> (raw)
Here is a small but complex puzzle with modules. I will use lowercase names for
modules and uppercase for signatures to simplify.
I have a process creating from a module a:A a module with two sub-modules
b:B and c:C containing both a same type t
module F(a:A) : sig module b:B module c:C with type t = b.t end
>From a and c I build other components. From b, I can also build other
things, they must be related later with the type t given by c.
So I want to build a functor d describing an a, building a c and using these,
b is also given back but not used inside d.
So A and C are fixed and well known but B is not and in fact there are
different kind of F giving different signature B.
module d(X:sig
module type B
module F(a:A) : sig
module b:B
module c:C with type t = b.t
end
end) :
sig
type t
module b : B with type t = t
val ... : ... t ...
end =
struct
module a = struct ... end
module bc = F(a)
type t = bc.b.t
module b = bc.b and c = bc.c
end
But I cannot speak of t because it is not a component of the abstract
signature B.
I could try
module b : B' where B' = sig type t include B end
but I will never relate a t in B and the specified t this way.
I could try in the specification of the functor argument
module type B = sig type t end
but then B is really limited to what I gave.
So we lack something to parameterize such abstract signature : the "with type"
construct is too external.
May be we should dig out parameterized signatures :
module type B(type t) = sig .... end
Its interface would be :
module type B(type t)
and it would be used like this :
module d(X:sig
module type B (type t)
module F(a:A) : sig module c:C module b: B(type t = c.t) end
end) :
sig
type t
module b : B(t)
val ... : ... t ...
end
My questions are :
- is there another way to build d achieving the same result but with standard
Objective Caml syntax ?
- are there been any work recently on parameterized signatures dealing with
those problems ?
PS 1> a,b,c,d.. it looks like a stupid school example but i have real code
behind it. b and c cannot be separated because the internal structure of the
abstract types provided by c depends on what you expect from b.
PS 2> parameterized signature existed in the original proposal for a module
system, but D. MacQueen showed that it was impossible to think of all the
possible sharing you wanted to express before hand. I am not considering
replacing sharing constraints with parameterized signatures but using both.
PS 3> parameterized signatures built this way are still rather abstract as
long as you do not try to use interface specifying their contents.
I don't think there is any problem to type-check them and we are not threatened
by Lilibridge & Harper counter-examples.
--
Pierre Cregut - pierre.cregut@cnet.francetelecom.fr - +33 2 96 05 16 28
FT.CNET - DTL/MSV - 2 avenue Pierre Marzin - 22307 Lannion Cedex - France
next reply other threads:[~1999-09-14 7:16 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
1999-09-13 10:25 Pierre CREGUT - FT . BD/CNET/DTL/MSV [this message]
1999-09-14 9:46 ` Francois Pottier
1999-09-16 16:59 ` Xavier Leroy
1999-09-17 13:01 ` Pierre CREGUT - FT . BD/CNET/DTL/MSV
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=19990913122532.A4032@lsun605 \
--to=pierre.cregut@cnet.francetelecom.fr \
--cc=caml-list@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