关于标准ML的签名匹配

时间:2015-01-26 06:05:26

标签: types matching sml signature

据我了解,如果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

我的理解有什么问题?

1 个答案:

答案 0 :(得分:3)

如果一个结构实现了MERGEABLE_QUEUE,它提供了一个函数,它接受一对任意类型的队列(只要这两个队列具有相同的类型)并生成一个新的队列。特别是,它可能需要两个int queue并生成另一个int queue(因此它实现MERGEABLE_INT_QUEUE),但它也可能需要两个bool queues并生成一个合并的bool queue 1}}。对于任何类型a',要求MERGEABLE_QUEUE的结构也会实现假设的MERGEABLE_a'_QUEUE

另一种方式并非如此。实现MERGEABLE_INT_QUEUE的结构只能合并两个int queues,而不能合并任意类型的任何两个队列。