2017-07-20 114 views
0

想象一下,我有一系列模塊A1..AnB1..Bn所有模塊都是完整的編譯單元。現在我定義與這些模塊的兩個新模塊作爲嵌套:在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中的模塊中的類型!

現在,我想創建一個新的模塊AB使得簽名是:

module AB : sig 
    module A1 
    ... 
    module An 

    module B1 
    ... 
    module Bn 
end 

但是我不想傾聽所有單獨的模塊,只需再出口的內容。也不允許使用-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 ...約束,這是混亂的嵌套模塊)