假设我有一个由模块M
参数化的模块F
:
module M (F : sig type id type data end) =
struct
type idtype = F.id
type datatype = F.data
type component = { id : idtype; data : datatype }
let create id data = { id; data }
let get_comp_data comp = comp.data
let get_comp_id comp = comp.id
end
所以我这样使用它:
module F1 = struct type id = int type data = float end
module MF1 = M(F1)
let comp = MF1.create 2 5.0
let id = MF1.get_comp_id comp
现在,如果我想M
匹配签名S
:
module type S =
sig
type idtype
type datatype
type component
val create : idtype -> datatype -> component
val get_comp_data : component -> datatype
val get_comp_id : component -> idtype
end
module F1 = struct type id = int type data = float end
module MF1 = (M(F1) : S)
let comp = MF1.create 2 5.0
let id = MF1.get_comp_id comp
这里困扰我的是,为了定义get_comp_data
and get_comp_id
,我需要在 module中指定idtype
and ;现在想象一下我有其他记录类型和他们自己的类型,我将有十几种类型来指定?有没有更简单的方法来避免这种情况?datatype
S
M
S