我想要一個很大的函子Hello(Blah:Blah_type)並將其保存在文件hello.ml中,但我該怎麼做?函數在OCaml中的單獨文件?
如果我只是在我的頂層文件,我不得不 模塊你好(布拉赫:Blah_type)= 結構 VAL X = 2 結束
但我怎麼把論點打招呼。毫升?我不能只讓整個文件爲「val x = 2」...?
我想要一個很大的函子Hello(Blah:Blah_type)並將其保存在文件hello.ml中,但我該怎麼做?函數在OCaml中的單獨文件?
如果我只是在我的頂層文件,我不得不 模塊你好(布拉赫:Blah_type)= 結構 VAL X = 2 結束
但我怎麼把論點打招呼。毫升?我不能只讓整個文件爲「val x = 2」...?
這是不可能的。源文件始終表示爲普通模塊,而不是函子。這是輕鬆解決一個額外的開放。
OCamlPro有編譯器補丁和外部工具,它可以支持這樣的:
http://www.ocamlpro.com/blog/2011/08/10/ocaml-pack-functors.html
據我所知,官方的編譯器版本不支持.ml文件作爲函子。
,其內容與
module type S = sig
(* ... *)
end
module Hello (M : S) = struct
(* ... *)
end
module M : S = struct
(* ... *)
end
module H = Hello(M)
(* ... *)
與真正的代碼示例補充ygrek的答案,而不是文件foo.ml
的你可以有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將被強制爲這個簽名),這只是爲了說明如何做到這一點。
當想要在多個編譯單元中分割函子時,bigfunctor補丁很有用。然而,這是過度的,在這裏只是將一個仿函數作爲單個編譯單元的模塊項包裝起來。 – gasche 2012-04-12 11:13:57
我把這個問題解釋爲尋找一種方法來避免Make in Hello.Make(...)。補丁和ocp-pack可能是沉重的方法,但據我所知它們是目前唯一可用的。 – hcarty 2012-04-12 21:09:39