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
使类型抽象,因此您需要添加类型…
约束,这对于嵌套的模块来说是混乱的)