Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Shared types: dependency in modules with polymorphic type
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2009-05-13 (19:41)
From: Jacques Carette <carette@m...>
Subject: Re: [Caml-list] Shared types: dependency in modules with polymorphic type
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].