2012-04-11 27 views
6

我想要一個很大的函子Hello(Blah:Blah_type)並將其保存在文件hello.ml中,但我該怎麼做?函數在OCaml中的單獨文件?

如果我只是在我的頂層文件,我不得不 模塊你好(布拉赫:Blah_type)= 結構 VAL X = 2 結束

但我怎麼把論點打招呼。毫升?我不能只讓整個文件爲「val x = 2」...?

回答

4

這是不可能的。源文件始終表示爲普通模塊,而不是函子。這是輕鬆解決一個額外的開放。

6

OCamlPro有編譯器補丁和外部工具,它可以支持這樣的:

http://www.ocamlpro.com/blog/2011/08/10/ocaml-pack-functors.html

據我所知,官方的編譯器版本不支持.ml文件作爲函子。

+0

當想要在多個編譯單元中分割函子時,bigfunctor補丁很有用。然而,這是過度的,在這裏只是將一個仿函數作爲單個編譯單元的模塊項包裝起來。 – gasche 2012-04-12 11:13:57

+0

我把這個問題解釋爲尋找一種方法來避免Make in Hello.Make(...)。補丁和ocp-pack可能是沉重的方法,但據我所知它們是目前唯一可用的。 – hcarty 2012-04-12 21:09:39

3

,其內容與

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 : SM : Hello.S的模塊是可選的(無論如何,M將被強制爲這個簽名),這只是爲了說明如何做到這一點。