在ocaml模块类型中,Mandate类型*不是* abstract

时间:2015-01-13 21:38:24

标签: ocaml

我想定义一个带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不是抽象的,所以任何实施者都必须公开它?

1 个答案:

答案 0 :(得分:3)

这是不可能的。但是你可以要求用户为你提供一个构造函数,如下所示:

module type T : sig
   type t
   val create : unit -> t
   val f : t -> unit
end