unit-interface | ::= | { specification [ ;; ] } |
unit-implementation | ::= | { definition [ ;; ] } |
翻訳単位は、モジュールシステムと分割コンパイルシステムの橋渡しをするものです。 翻訳単位はインタフェースと実装のふたつの部分から成ります。 インタフェースは仕様の並びで、単純にシグネチャ式の sig ... end の中身と同じです。 実装は定義の並びで、モジュール式の struct .. end の中身と同じです。 翻訳単位には unit-name という名前もあり、この名前はインタフェースと実装を格納したファイルの名前から導出されます(8 章を参照)。 モジュール定義はおおよそ次のようなモジュール定義と対応します。
module unit-name : sig unit-interface end = struct unit-implementation end
翻訳単位は、通常のモジュールのように名前で参照できます。
例えば、 U
が型 t
を定義した翻訳単位であるとき、他の翻訳単位からはその型を U.t
という名前で参照することができます。
U
をストラクチャ全体のように参照することもできます。
unit-interface や unit-implementation には他の翻訳単位の名前以外の自由変数があってはなりません。
言い換えると、インタフェースや実装の型検査は次のような初期環境で行われるということです。
name1 : sig specification1 end ... namen
:
sig specificationn
end
ここで、 name1 ... namen
は探索パス中で利用可能な他の翻訳単位で(詳細は 8 章を参照)、 specification1 ... specificationn
はそれに対応するインタフェースです。