What kind of consistency guarantees does this offer?
class CustomModule<S, T1 extends Module1Interface<S>, T2 extends Module2Interface<S> > {
constructor(t1: T1, t2: T2) { ... }
}
Meaning that, for example, within Module1Inteface, there is some function f1 that returns an S, and within Module2Interface, there is some function f2 that takes an S as argument. module CustomModule(M1: Module1)(M2: Module2 with type s = M1.s) module type Comparable = sig
type t
val compare : t -> t -> int
end