一个人为的例子:包含两个签名,都与一个“类型T” [标准ML]
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
显然,这将导致投诉type t
在C
发生两次。但是,有没有什么办法来表达,我希望两个t
s到相提并论,与结束了:
signature C =
sig
type t
val x: t
val y: t
end
我试过各种愚蠢的语法像include B where type t = A.t
,这勿庸置疑没有工作。有什么我忘记试试吗?
另外,我知道这只是简单地通过检查语言的语法来解决任何明显(或缺少)的问题,但我无法在互联网上的任何位置找到完整的语法。
(FWIW,我试图做到这一点的实际原因是哈斯克尔式的单子和这样的,其中MonadPlus
只是一个Monad
和Alternative
的组合;此刻我只是重复的内容ALTERNATIVE
in MONAD_PLUS
,这让我觉得不太理想。)