複数のモジュールからライブラリを作成する場合、必要なものすべてにアクセスできるようにライブラリのユーザ(外部インターフェイス)に適切な情報を隠す良い方法を見つけることができません内部インタフェースOCamlの外部と内部のインターフェイスと情報の隠蔽
具体的には、2つのモジュール(Files a.ml [i]とb.ml [i])があります。 Aでは、私はいくつかのタイプtを定義します。これは、ユーザ(外部インタフェース)から隠蔽したくない内部のものです。モジュールBで
module A : sig
type t
end
module A = struct
type t = float
end
、私はその後A.t
の秘密タイプを使用します。
module B : sig
create_a : float -> A.t
end
module B = struct
create_a x = x
end
Bのコンパイル単位はA.t
の種類を知らないので、もちろんこれは、コンパイルされません。
私が知っているソリューションが、好きではない:
- は
B
にA
- コピー
A.t
の定義をモジュールといくつかのexternal cheat : `a -> `b = "%identity"
create_a
を移動します
のタイプをB
に知る他の方法は、この情報をライブラリのインターフェイスに漏らさないでください。
nice!さようなら 'pack'オプションです。 – lambdapower