给定具有两种抽象类型的签名,定义使它们相等的子签名

时间:2016-06-01 17:20:26

标签: module sml signature

我有一个非常大的签名,有两种抽象类型:

GENERAL_FOO_BAR

我想声明signature SPECIAL_FOO_BAR = GENERAL_FOO_BAR where type foo = bar signature SPECIAL_FOO_BAR = GENERAL_FOO_BAR sharing type foo = bar 的子签名,其中标识了两种抽象类型,但以下尝试均无效:

signature SPECIAL_FOO_BAR =
sig
  type both
  include GENERAL_FOO_BAR
    where type foo = both
    where type bar = both
end

使用虚拟类型非常麻烦,如下所示:

SPECIAL_FOO_BAR

因为它会强制任何想要实现Handler的人来定义虚拟类型。还有更好的选择吗?

1 个答案:

答案 0 :(得分:2)

您不需要对“子签名”如此明确。这是一个简单的“子签名”示例:

signature F =
sig
    type foo
    type bar
end

signature G =
sig
    type foo = int
    type bar = string
end

structure C : G =
struct
    type foo = int
    type bar = string
end

structure D : F = C