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

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