2017-07-20 9 views
0

私は一連のモジュールを持っているとします。A1..AnB1..Bnすべてが完全なコンパイル単位です。今度は、これらのモジュールを入れ子にして2つの新しいモジュールを定義します。モジュール内のすべてのモジュールをocamlに含めます

(* A.mli *) 
module A : sig 
    module A1 
    ... 
    module An 
end 
(* A.ml *) 
module A1 = A1 
.. 
module An = An 

(* B.mli *) 
module B : sig 
    open A 
    module B1 
    ... 
    module Bn 
end 
(* B.ml *) 
module B1 = B1 
.. 
module Bn = Bn 

したがって、元のモジュールはモジュールエイリアスを使用して再エクスポートされます。 Bのモジュールは、A1..Anのモジュールのタイプを参照することがあります。

module AB : sig 
    module A1 
    ... 
    module An 

    module B1 
    ... 
    module Bn 
end 

は、しかし、私はちょうど内容を再輸出するために、すべての個々のモジュールを聞きたくない:

は今、私は署名があるABように、新しいモジュールを作成します。 -openを使用することもできません。私が思い付くことができる最高は次のとおりです。

module AB : sig 
    include module type of struct include A end 
    include module type of struct include B end 
end 

我々は、のは言わせタイプA.A1.tA1.tの間のリンクを失うしかし、これは失敗します。私が望むものを達成する方法はありますか?ありがとう。

答えて

0

次はうまくいくように見えます:

module AB : sig 
    include A 
    include B 
end 

module type ofは、種類の抄録を作るので、あなたは、ネストされたモジュールと厄介である、with type ...制約を追加する必要があるだろう)

関連する問題