Придуманный пример:
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, настоящая причина, по которой я пытаюсь это сделать, это монады в стиле Хаскеля и т. Д., Где MonadPlus
- это просто сочетание Monad
и Alternative
; на данный момент я просто повторяю содержимое ALTERNATIVE
в MONAD_PLUS
, что кажется мне менее чем идеальным.)