Module 在ocaml中包含模块内的所有模块

Module 在ocaml中包含模块内的所有模块,module,ocaml,Module,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

假设我有一系列模块,它们都是一个完整的编译单元。现在,我定义了两个新模块,其中这些模块是嵌套的:

(* 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
之间的链接。有没有办法实现我想要的?谢谢。

看起来以下方法可以奏效:

module AB : sig
  include A
  include B
end
module-type of
使类型抽象,因此您需要添加
类型…
约束,这对于嵌套的模块来说是混乱的)