关于标准ML的签名匹配

On signature matching of Standard ML

据我了解,如果 CANDIDATETARGET 强,则 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,不能合并任意两个任意类型的队列。