Sof*_*mur 4 inheritance ocaml types module
我已经定义了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
Run Code Online (Sandbox Code Playgroud)
但是当我编译它时,它最终会给我一个错误Error: This expression has type 'a array array but an expression was expected of type 'a t = 'a MatrixArray.t.
有谁知道如何保持这种继承并使类型'a t = 'a array array被识别?
在代码中:
module MatrixArray : MATRIX = struct
type 'a t = 'a array array
...
end
Run Code Online (Sandbox Code Playgroud)
你强制MatrixArray隐藏的定义'a t.解决问题的一种方法是删除签名约束:
module MatrixArray = struct
type 'a t = 'a array array
...
end
Run Code Online (Sandbox Code Playgroud)
您可以在以后替换MatrixArray用(MatrixArray : MATRIX)的时候要抽象类型t.
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |