English version
Accueil     Ŕ propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis ŕ jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml ŕ l'adresse ocaml.org.

Browse thread
Nesting Modules
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2005-11-02 (14:02)
From: Tom Hawkins <tom@c...>
Subject: Re: [Caml-list] Nesting Modules
I found a convenient way to compose a set modules into a hierarchical 
library.  First define the set of modules (ml/mli file pairs) -- these 
become the leaves in the module tree.  Next, define the branch modules 
in the hierarchy using "module Leaf = Leaf" (ml only, no mli).  Then 
compile and link.  The only restriction is that all functional code must 
reside in leaf modules.  Here's an example...

# Define the leaf modules.
echo 'let name = "leaf1"' > leaf1.ml
echo 'val name : string'  > leaf1.mli
echo 'let name = "leaf2"' > leaf2.ml
echo 'val name : string'  > leaf2.mli
echo 'let name = "leaf3"' > leaf3.ml
echo 'val name : string'  > leaf3.mli

# Define the branch modules.
echo 'module Leaf2 = Leaf2;; module Leaf3 = Leaf3'     > branch2.ml
echo 'module Leaf1 = Leaf1;; module Branch2 = Branch2' > branch1.ml

# Compile all leaf modules.
ocamlc -c leaf1.mli
ocamlc -c leaf1.ml
ocamlc -c leaf2.mli
ocamlc -c leaf2.ml
ocamlc -c leaf3.mli
ocamlc -c leaf3.ml

# Compile all branch modules.
ocamlc -c branch2.ml
ocamlc -c branch1.ml

# Link the library.
ocamlc -a -o branch1.cma leaf1.cmo leaf2.cmo leaf3.cmo branch2.cmo 

# Delete all *.cmi files except top.
rm leaf*.cmi
rm branch2.cmi

# Run.
ocaml branch1.cma

         Objective Caml version 3.09.0

# Branch1.Branch2.Leaf3.name;;
- : string = "leaf3"

Thanks for everyone's help!