我想要一个大的算子Hello(Blah:Blah_type)并将其保存在文件hello.ml中,但是我该怎么做?
如果我只是在我的顶级文件中,我有模块Hello(Blah:Blah_type)= struct val x = 2 end
但是如何将参数放在hello.ml中呢?我不能只让整个文件"val x = 2"......?
OCamlPro有一个编译器补丁和外部工具,可以支持这个:
http://www.ocamlpro.com/blog/2011/08/10/ocaml-pack-functors.html
据我所知,官方编译器版本不支持.ml文件作为仿函数.
foo.ml用真实的代码示例来补充 ygrek 的答案,而不是包含内容的文件
module type S = sig
(* ... *)
end
module Hello (M : S) = struct
(* ... *)
end
module M : S = struct
(* ... *)
end
module H = Hello(M)
(* ... *)
Run Code Online (Sandbox Code Playgroud)
你可以有hello.ml内容
module type S = sig
(* ... *)
end
module Make (M : S) = struct
(* ... *)
end
Run Code Online (Sandbox Code Playgroud)
并foo.ml重写为
module M : Hello.S = struct
(* ... *)
end
module H = Hello.Make(M)
(* ... *)
Run Code Online (Sandbox Code Playgroud)
PS:如果你觉得它令人困惑,模块密封M : SorM : Hello.S是可选的(无论如何,当传递给仿函数时,M 将被强制为这个签名),这只是为了展示如何做到这一点。
| 归档时间: |
|
| 查看次数: |
544 次 |
| 最近记录: |