Browse thread
Syntactic inclusion of a.ml in b.ml ?
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
| Date: | -- (:) |
| From: | Richard Jones <rich@a...> |
| Subject: | Re: [Caml-list] Syntactic inclusion of a.ml in b.ml ? |
On Fri, Apr 08, 2005 at 07:41:42PM +0200, Sébastien Hinderer wrote: > (How) is it possible to include syntactically a file a.ml in a file > b.ml ? > > One method that seems to w)rk is to rename b.ml to b.ml.c, > and then have in b.ml.c a line saying > #include "a.ml" > And with this, gcc -E b.ml.c > b.ml > produces a file that ocamlc can apparently handle. I'm not 100% clear on what you want to do. A common requirement is to split a large module into a number of smaller files, which is then compiled back into a single large module. This can be done using a preprocessor (such as cpp) - see the -pp option to the compiler. Often it's better just to use a single large file and a capable editor, with "folding"[1] capabilities. Another one is to include the symbols from one module in another. This can be done using the 'include' directive in OCaml, eg: -- a.ml ---- let foo = 1 ------------ -- b.ml ---- include A let bar = 2 ------------ Now, if compiled in the correct order, module B will export symbols 'foo' and 'bar'. 'include' and 'open' are very similar. The difference is that 'include' causes the symbols imported to be (re-)exported. 'open A' on the other hand makes the symbols in A available inside B, but they are not exported in B's interface. Another option is to use the -pack argument when linking [not supported on all platforms]. This causes modules to be nested inside a "super-module". For example, ocamlc -pack -o c.cmo a.cmo b.cmo (IIRC) creates a module called C containing C.A and C.B modules. Rich. [1] http://www.moria.de/~michael/fe/folding.html -- Richard Jones, CTO Merjis Ltd. Merjis - web marketing and technology - http://merjis.com Team Notepad - intranets and extranets for business - http://team-notepad.com