From: Jacques Carette <carette@mcmaster.ca>
To: Hugo Ferreira <hmf@inescporto.pt>
Cc: caml-list@yquem.inria.fr
Subject: Re: [Caml-list] Shared types: dependency in modules with polymorphic type
Date: Wed, 13 May 2009 15:40:08 -0400 [thread overview]
Message-ID: <4A0B2218.2050305@mcmaster.ca> (raw)
In-Reply-To: <4A0B1B81.8090700@inescporto.pt>
One modification which will get you a long way towards your goal is to
remove the : VB from
Hugo Ferreira wrote:
> module VB1 : VB
> = struct ...
While this may look like it is just "type checking", it in fact does
more and makes sure that VB1.t, to the outside world, is abstract. This
stops any possibility of unification with 'like' types. Same with Make_U.
Note that VB1 will still be of type VB, and you can be sure of that
because the constraint in Make_U's signature will enforce it -- only a
bit later than at declaration time, at use-time.
> My question is: is their any way I may organize the modules or
> indicate shared types in order to use a (very extensive) VB
> interface (Or VB1 module)? Specifically how do I enforce the
> shared type:
>
> U1.instance VB1.t = U1.t = Make_U(VB1).t
First, try the above. It may help. If it does not, then you will need
to add explicit sharing constraints. But which sharing constraints are
*really* needed will be the ones revealed by first removing the type
annotations you currently have.
Note that you should not have to re-organize your modules at all to
achieve this [at least, not in this example].
Jacques
next prev parent reply other threads:[~2009-05-13 19:41 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-05-13 19:12 Hugo Ferreira
2009-05-13 19:40 ` Jacques Carette [this message]
2009-05-14 7:58 ` [Caml-list] " Hugo Ferreira
2009-05-14 14:42 ` Andreas Rossberg
2009-05-14 15:06 ` Hugo Ferreira
2009-05-14 11:41 ` Shared types: circular " Hugo Ferreira
2009-05-14 12:11 ` [Caml-list] " Peng Zang
2009-05-14 12:46 ` Hugo Ferreira
2009-05-14 13:20 ` Peng Zang
2009-05-14 13:28 ` Hugo Ferreira
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=4A0B2218.2050305@mcmaster.ca \
--to=carette@mcmaster.ca \
--cc=caml-list@yquem.inria.fr \
--cc=hmf@inescporto.pt \
/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