大きなソフトウェアを作るときは、プログラムを複数のモジュールに分割してコンパイルしたくなります。OCamlでは、「モジュールの名前.ml」というファイルに実装を、「モジュールの名前.mli」というファイルにインターフェースを記述するだけで、簡単に分割コンパイルができます。インターフェースには関数や定数、データ型や例外の宣言を記述します。
たとえばTestという名前のモジュールを作成したかったら、まずtest.mlというファイルに
let x = 123
let f y = x + y
let _ = print_int (f 456)
のように実装を定義しておき、test.mliというファイルに
val x : int
val f : int -> int
のようにインターフェースを宣言しておけば、他のモジュールからTest.xという整数やTest.fという関数が使えます。ただしインターフェースに記述されていない定義は、外部から参照できません。
もちろん、
> ocamlopt test.mli test.ml -o test
> ./test
579
のようにコンパイル実行も可能です。ファイルの数が多くなってきたら、OCamlMakefileという、コンパイルなどを自動でやってくれる便利なツールもあります。