据我了解,如果CANDIDATE
签名强于TARGET
,则CANDIDATE
签名与TARGET
签名匹配。然后,如果结构some_structure
实现了签名CANDIDATE
,它也实现了签名TARGET
。
但根据Robert Haper's 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
,不能合并任意类型的任意两个队列。