Version française
Home     About     Download     Resources     Contact us    
Browse thread
Private modules in packages
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Julien Signoles <julien.signoles@g...>
Subject: Re: [Caml-list] Private modules in packages
2010/5/21 Goswin von Brederlow <goswin-v-b@web.de>

> Julien Signoles <julien.signoles@gmail.com> writes:
>
> > Hello,
> >
> > 2010/5/21 Ashish Agarwal <agarwal1975@gmail.com>
> >
> >     > write a script to generate the P.mli file
> >
> >     Why do you need Bar.mli and Foo.mli at all? Just write the P.mli
> only.
> >
> >
> > If your pack is big, you may want to mask internals of Bar and Foo to
> others
> > modules of the pack. Actually, values exported in Bar/Foo but not in P
> exactly
> > are the module counterparts of "friend methods" in OO languages.
>
> But then, if you have methods in Bar and Foo visible inside the pack but
> not from outside, you can't just cat Bar.mli and Foo.mli into
> P.mli. You need to process it to remove the 'friends' functions.
>

You can do something like that (pure ocaml without any external script):

=== file baz.mli (outside the pack P) ===
module type Foo = sig ... (* my public values here *) end

=== file p.mli ===
module Foo: Baz.Foo

=== file foo.mli ===
include Baz.Foo
... (* my friend values *)

=== file foo.ml ===
... (* all my internals: defining my public+friends+private values *)

Hope this helps,
Julien