我想要一个大函子Hello(Blah:Blah_type)并将其保存在文件hello.ml中,但我该怎么做?
如果我只是在我的顶级档案中,我会有 模块Hello(Blah:Blah_type)= 结构 val x = 2 端
但如何将参数放在hello.ml中?我不能让整个文件都是“val x = 2”......?
答案 0 :(得分:6)
OCamlPro有一个编译器补丁和外部工具,可以支持这个:
http://www.ocamlpro.com/blog/2011/08/10/ocaml-pack-functors.html
据我所知,官方编译器版本不支持.ml文件作为仿函数。
答案 1 :(得分:4)
这是不可能的。源文件始终表示为普通模块,而不是仿函数。这可以通过一个额外的开放来解决。
答案 2 :(得分:3)
使用实际代码示例来补充ygrek的答案,而不是带有内容的文件foo.ml
module type S = sig
(* ... *)
end
module Hello (M : S) = struct
(* ... *)
end
module M : S = struct
(* ... *)
end
module H = Hello(M)
(* ... *)
您可以hello.ml
包含内容
module type S = sig
(* ... *)
end
module Make (M : S) = struct
(* ... *)
end
和foo.ml
重写为
module M : Hello.S = struct
(* ... *)
end
module H = Hello.Make(M)
(* ... *)
PS:如果您发现它令人困惑,密封M : S
或M : Hello.S
的模块是可选的(无论如何,当传递给仿函数时,M将被强制转换为此签名),它只是为了展示如何这可以做到。