关于标准ML的签名匹配
On signature matching of Standard ML
据我了解,如果 CANDIDATE
比 TARGET
强,则 CANDIDATE
签名与 TARGET
签名匹配。那么如果结构 some_structure
实现了签名 CANDIDATE
,它也实现了签名 TARGET
。
但是根据 Robert Haper Programming in Standard ML(11.02.11 的 1.2 版)的第 155 页:
signature MERGEABLE_QUEUE =
sig
include QUEUE
val merge : 'a queue * 'a queue -> 'a queue
end
匹配
signature MERGEABLE_INT_QUEUE =
sig
include QUEUE
val merge : int queue * int queue -> int queue
end
虽然在我看来,它应该 MERGEABLE_INT_QUEUE
匹配 MERGEABLE_QUEUE
。因为如果 some_structure
实现了 MERGEABLE_INT_QUEUE
,它也实现了 MERGEABLE_QUEUE
。
我的理解有什么问题吗?
如果一个结构实现了MERGEABLE_QUEUE
,它提供了一个接受一对任意类型队列的函数(只要这两个队列的类型与彼此)并产生一个新队列。特别是,它可以使用两个 int queue
并生成另一个 int queue
(因此它实现了 MERGEABLE_INT_QUEUE
),但它也可以使用两个 bool queues
并生成一个合并的 bool queue
。对于任何类型 a'
,实现 MERGEABLE_QUEUE
的结构也实现假设的 MERGEABLE_a'_QUEUE
.
反之则不然。实现 MERGEABLE_INT_QUEUE
的结构只能合并两个 int queues
,不能合并任意两个任意类型的队列。
据我了解,如果 CANDIDATE
比 TARGET
强,则 CANDIDATE
签名与 TARGET
签名匹配。那么如果结构 some_structure
实现了签名 CANDIDATE
,它也实现了签名 TARGET
。
但是根据 Robert Haper Programming in Standard ML(11.02.11 的 1.2 版)的第 155 页:
signature MERGEABLE_QUEUE =
sig
include QUEUE
val merge : 'a queue * 'a queue -> 'a queue
end
匹配
signature MERGEABLE_INT_QUEUE =
sig
include QUEUE
val merge : int queue * int queue -> int queue
end
虽然在我看来,它应该 MERGEABLE_INT_QUEUE
匹配 MERGEABLE_QUEUE
。因为如果 some_structure
实现了 MERGEABLE_INT_QUEUE
,它也实现了 MERGEABLE_QUEUE
。
我的理解有什么问题吗?
如果一个结构实现了MERGEABLE_QUEUE
,它提供了一个接受一对任意类型队列的函数(只要这两个队列的类型与彼此)并产生一个新队列。特别是,它可以使用两个 int queue
并生成另一个 int queue
(因此它实现了 MERGEABLE_INT_QUEUE
),但它也可以使用两个 bool queues
并生成一个合并的 bool queue
。对于任何类型 a'
,实现 MERGEABLE_QUEUE
的结构也实现假设的 MERGEABLE_a'_QUEUE
.
反之则不然。实现 MERGEABLE_INT_QUEUE
的结构只能合并两个 int queues
,不能合并任意两个任意类型的队列。