Надуманный пример:
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
были приравнены, заканчиваясь:
signature C =
sig
type t
val x: t
val y: t
end
Я испробовал всевозможный глупый синтаксис, например include B where type t = A.t
, который, что неудивительно, не сработал. Есть ли что-то, что я забыл попробовать?
Кроме того, я знаю, что на этот вопрос можно было бы просто ответить, проверив синтаксис языка на наличие чего-либо очевидного (или отсутствия), но я нигде не смог найти полную грамматику в Интернете.
(FWIW, фактическая причина, по которой я пытаюсь это сделать, — это монады в стиле Haskell и тому подобное, где MonadPlus
— это просто смесь Monad
и Alternative
; в данный момент я просто повторяю содержимое ALTERNATIVE
в MONAD_PLUS
, что кажется мне далеким от идеала.)