obj GenericOpType = op(AnyIn)->(AnyOut); obj AnyIn = any; obj AnyOut = any; obj MoreSpecificOpType extends GenericOpType where: AnyIn = MoreSpecificInType; AnyOut = MoreSpecificInType; end; obj MoreSpecificInType extends AnyIn = integer and integer and integer; obj MoreSpecificOutType extends AnyIn = integer and integer; op AnOpOfAMoreSpecificType(MoreSpecificInType)->(MoreSpecificOutType); op AnotherOpOfAMoreSpecificType(integer,integer,integer)->(integer,integer); (* * Note: both of the preceding ops match MoreSpecificOpType, the former * obviously, and the latter by the parm unbundling rule. *) val mo1:MoreSpecificOpType = AnOpOfAMoreSpecificType; val mo2:MoreSpecificOpType = AnotherOpOfAMoreSpecificType;