当前位置 : 主页 > 手机开发 > 其它 >

模块的继承及其类型

来源:互联网 收集:自由互联 发布时间:2021-06-19
我已经定义了2个签名和2个模块,如下所示.一个签名来自另一个;一个模块来自另一个模块. module type MATRIX =sig type 'a t ...endmodule type AMATRIX = sig include MATRIX ...endmodule MatrixArray : MATRIX =struct
我已经定义了2个签名和2个模块,如下所示.一个签名来自另一个;一个模块来自另一个模块.

module type MATRIX =
sig
  type 'a t
  ...
end

module type AMATRIX = 
sig
  include MATRIX
  ...
end

module MatrixArray : MATRIX =
struct
  type 'a t = 'a array array
  ...
end

module AMatrixArray : AMATRIX =
struct
  include MatrixArray
  let init (x: 'a) : 'a t =
    Array.make 2 (Array.make 2 x)
  ...
end

但是当我编译它时,它最终给了我一个错误错误:这个表达式有一个类型’一个数组数组但是表达式是’a t =’a MatrixArray.t.

有谁知道如何保持这种继承并使类型’a t =’数组数组被识别?

实际上,MatrixArray不仅仅是一个MATRIX:它是一个MATRIX,其中类型t的实现已知是一个数组.所以你可以写:

module MatrixArray : MATRIX with type 'a t = 'a array array =
struct
  type 'a t = 'a array array
  ...
end

这样,您可以保留MATRIX约束并检测类型错误,并保留有关类型实际的信息 – 当然,假设您关心的是将类型设为public而不是abstract.

网友评论