给定一个具有两个抽象类型的签名,定义一个使它们相等的子签名
Given a signature with two abstract types, define a subsignature that makes them equal
我有一个非常大的签名,有两个抽象类型:
signature GENERAL_FOO_BAR =
sig
type foo
type bar
(* lots of stuff here *)
end
我想声明 GENERAL_FOO_BAR
的子签名,其中标识了两个抽象类型,但是 none 以下尝试有效:
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
的人定义虚拟类型。有更好的选择吗?
你不需要对 "subsignatures" 说得那么直白。下面是一个简单的例子 "subsignatures":
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
我有一个非常大的签名,有两个抽象类型:
signature GENERAL_FOO_BAR =
sig
type foo
type bar
(* lots of stuff here *)
end
我想声明 GENERAL_FOO_BAR
的子签名,其中标识了两个抽象类型,但是 none 以下尝试有效:
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
的人定义虚拟类型。有更好的选择吗?
你不需要对 "subsignatures" 说得那么直白。下面是一个简单的例子 "subsignatures":
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