(*我想重新制定,我以前張貼的問題,以使其更清晰,並吸引了更多的關注。我認爲這個問題仍然是有趣。*)重組2個仿函數,以避免重複執行
我已經定義了一個模塊式ZONE
如下:
(* part of zone.ml *)
module type ZONE =
sig
type info
type prop
type t = { s: string; p: prop; i: info }
val f1 : t -> string
end
其中i: info
用於包含各種信息,這有助於避免重複計算。它不會總是相同的,因爲它取決於構建Zone
的Prop
。舉例來說,這裏是從PROP
類型的模塊構建ZONE
類型的模塊Zone
一個仿函數,一個基本info
:
(* part of zone.ml *)
module ZoneFun (Prop : PROP) = struct
type info = { a: int }
type prop = Prop.t
type t = { s: string; p: prop; i: info }
let f0 z = "f0"
...
end
這裏是另一個函子來構建ZONE
類型的模塊Zone
,具有相對更復雜的info
:
(* zoneFunPrec.ml *)
module ZoneFunPrec (Prop: PROP) (Prec: ZONESM) = struct
type info = { a: int; b: Prec.t }
type prop = Prop.t
type t = { s: string; p: prop; i: info }
let get_prec z = z.info.prec
let f0 z = "f0"
...
end
那麼我可以用仿函數如下:
module ZoneC = ZoneFun(PropC)
module ZoneA = ZoneFunPrec(PropA)(ZonesmB)
問題是,type info
和get_prec
(ZoneFun
有它,而ZoneFunPrec
還沒有)是這兩個函子的唯一區別;他們的type prop
和type t
是相同的,他們的功能f0
,f1
...(有很多)也是一樣的。
所以我想知道如何從執行f0
,f1
避免等兩次......
沒有人有重組模塊/仿函數來實現這一點,並讓他們有意義的想法?
請嘗試問題儘可能的小,並使其編譯。你的代碼包含了太多無意義的細節給答覆者,而不是完整的,而且不是可編譯的。 ZoneFunPrec(ProcC)是錯誤的。它必須是ZoneFun(ProcC) – camlspotter
你是對的'ZoneFun(ProcC)',剛剛修改... – SoftTimur