关于标准 ML 的签名匹配



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

最新更新