モジュール型ZONE
と 2 つのファンクター (ZoneFun
とZoneFunPrec
) を定義してビルドしました。
(* zone.ml *)
module type ZONE =
sig
type info
type prop
type t = { p: prop; i: info }
val f1 : t -> string
end
module ZoneFun (Prop : PROP) = struct
type info = { a: int }
type prop = Prop.t
type t = { p: prop; i: info }
let f1 z = "f1"
end
(* zoneFunPrec.ml *)
module ZoneFunPrec (Prop: PROP) (Prec: ZONESM) = struct
type info = { a: int; b: Prec.t }
type prop = Prop.t
type t = { p: prop; i: info }
let f1 z = "f1"
let get_prec z = z.info.prec
end
これら 2 つのファンクターの一部の関数は、異なる方法で実装されています (例: f0
)。一部の機能はまったく同じです (例: f1
)。私の質問は、これらの一般的な機能を抽出して、それらを2回実装するのを避ける方法ですか?
編集:(より明確にするために、より具体的な情報を提供する必要があることを認識しています...変更について申し訳ありません...)
と にはいくつかの違いがZoneFun
ありZoneFunPrec
ます。
1) それらtype info
は同じではありません 2)ZoneFunPrec
持っget_prec
てZoneFun
いないものを持っていZONE
ます。
後で、ゾーンを作成して構築するmodule ZoneB = ZoneFun(B)
ことができます...module ZoneA = ZoneFunPrec(C)(ZonesmD)