A contrived example:
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
Obviously, this will cause complaints that type t
occurs twice in C
. But is there any way to express that I want the two t
s to be equated, ending up with:
signature C =
sig
type t
val x: t
val y: t
end
I tried all sorts of silly syntax like include B where type t = A.t
, which unsurprisingly didn't work. Is there something I've forgotten to try?
Also, I know that this would be simply answered by checking the language's syntax for anything obvious (or a lack of), but I couldn't find a complete grammar anywhere on the internet.
(FWIW, the actual reason I'm trying to do this is Haskell-style monads and such, where a MonadPlus
is just a mix of a Monad
and an Alternative
; at the moment I'm just repeating the contents of ALTERNATIVE
in MONAD_PLUS
, which strikes me as less than ideal.)