假设我想扩展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
。我想知道这是否可行?
答案 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