包括两个签名,两个签名均带有“ t型” [标准ML]

And*_*ris 5 sml include signature

一个人为的例子:

signature A =
sig
  type t
  val x: t
end

signature B =
sig
  type t
  val y: t
end

signature C = sig include A B end
Run Code Online (Sandbox Code Playgroud)

显然,这将导致中的type t两次投诉C。但是有什么方法可以表达我希望两者t相等,最后是:

signature C =
sig
  type t
  val x: t
  val y: t
end
Run Code Online (Sandbox Code Playgroud)

我尝试了各种愚蠢的语法,例如include B where type t = A.t,这并不奇怪。有什么我忘记尝试的东西吗?

另外,我知道可以通过检查语言的语法来发现(或缺少)任何明显的答案,但是我在互联网上的任何地方都找不到完整的语法。

(FWIW,我尝试这样做的实际原因是Haskell风格的monad之类的东西,其中a MonadPlus只是a Monad和an 的混合体Alternative;此刻我只是重复ALTERNATIVEin 的内容MONAD_PLUS,这对我的影响不那么大比理想的。)

Nor*_*sey 2

你完蛋了。正如乔丹·刘易斯(Jordan Lewis)建议的那样,您能做的最好的事情就是使用子结构和共享子句。对于include两个都定义的不同签名t始终是一个错误。所以按照你想要的方式混合ALTERNATIVEMONAD_PLUS行不通的。

有关其他问题的建议include以及如何修复它们,请参阅签名的表达语言