我想定义一个带type t
的模块类型。因此,type
的任何实施者都必须选择type t
。有没有办法从模块type
定义来保证这个type t
不是是抽象的。所以说我在我的mli文件中有这个定义:
module type TYP = sig
type t
val f: t->unit
end
module M:TYP
使用此模块类型,任何想要致电M.f
的人都会失败,因为type t
是抽象的,因此无法生成它。当然,我可以这样做
module type TYP = sig
type t
val f: t->unit
end
module M:TYP with type t=int
但有没有办法来满足需求" type t
不是抽象的,所以任何实施者都必须公开它?
答案 0 :(得分:3)
这是不可能的。但是你可以要求用户为你提供一个构造函数,如下所示:
module type T : sig
type t
val create : unit -> t
val f : t -> unit
end