OCaml:包含模块但是使类型抽象

时间:2015-03-26 06:38:48

标签: ocaml

假设我想扩展Array模块,

module type VEC =
sig
  include module type of Array
  type 'a t
  (* other stuff *)
end

具体实施

module Vec : VEC = struct
include Array
type 'a t = 'a array
(* other stuff *)
end

使用include Array使我能够继续使用Array模块中的函数并且还可以访问运算符。但是,如果我致电Vec.make 4 0,它将返回int array

我希望它能够继续使用Array模块中的函数,但让它们返回int Vec.t。我想知道这是否可行?

1 个答案:

答案 0 :(得分:1)

除了在Array的定义中使用'a t重新声明VEC的功能外,我担心没有简单的方法:

module type VEC = sig
  type 'a t

  (* Instead of  include module type of Array, hand write all the types of
     the function in Array, replacing 'a array to 'a t *)
  val length : 'a t -> int
  val get : 'a t -> int -> 'a
  ...
end

module Vec : VEC = struct
  type 'a t = 'a array
  include Array
end