ocaml 模块类型中的强制类型 *not* abstract
Mandate type *not* abstract in ocaml module type
我想用 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
但是有什么方法可以 "demand" 使 type t
不是抽象的,以至于任何实施者都必须公开它?
这是不可能的。但是你可以要求用户为你提供一个构造函数,像这样:
module type T : sig
type t
val create : unit -> t
val f : t -> unit
end
我想用 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
但是有什么方法可以 "demand" 使 type t
不是抽象的,以至于任何实施者都必须公开它?
这是不可能的。但是你可以要求用户为你提供一个构造函数,像这样:
module type T : sig
type t
val create : unit -> t
val f : t -> unit
end