想象一下,我有一系列模块A1..An
B1..Bn
,所有这些模块都是一个完整的编译单元。现在我定义了两个新模块,这些模块是嵌套的:
(* 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.t
和A1.t
。有没有办法实现我想要的?感谢。
答案 0 :(得分:0)
看起来以下情况可行:
module AB : sig
include A
include B
end
(module type of
生成类型摘要,因此您需要添加with type ...
约束,这对嵌套模块来说很麻烦)