我有一个非常大的签名,有两种抽象类型:
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
的人来定义虚拟类型。还有更好的选择吗?
答案 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