9.3 The toplevel and the module system

コンパイルユニットの中で定義されている識別子は、分割コンパイルと同じメカニズムで、トップレベルフレーズから参照できます。限定された名前 (Modulename.localname) を使うか、open コンストラクトを使った後、限定されていない名前を使うことです (セクション 6.3 を見てください) 。

しかし、他のコンパイルユニットを参照する前に、そのユニットの実装がメモリになければなりません。トップレベルシステムは起動時に標準ライブラリモジュールをすべてメモリにのせます。ユーザモジュールの実装は上記の #load 指示語を使ってロードできます。実装がメモリにないユニットを参照しようとすると ``Reference to undefined global `...' '' とエラーになります。

open mod としても、トップレベルは mod のコンパイル済みインターフェイス (.cmi) にアクセスするだけで、mod の実装はロードされず、かつ mod がロードされていなくても何のエラーも出ないことに注意してください。``reference to undefined global mod'' というエラーは mod を参照している値やモジュールの定義を実行しようとしたときだけ発生します。