【发布时间】:2017-07-20 18:33:10
【问题描述】:
假设我有一系列模块A1..AnB1..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 之间的链接。有没有办法实现我想要的?谢谢。
【问题讨论】: