concrete/*!!!*/Type<#a,#b // <- contravariant params |#c,#d // <- invariant params |#e,#f /* <- covariant params*/> { refines /* <- used with value interfaces */ Parent refines Other,#f> defines /* <- used with type interfaces */ Equals> #a allows /* <- used with value-interface filters */ Parent #b requires Type2<#a> #c defines // <- used with type-interface filters Equals<#c /* <- a type arg */> @category create<#x> #x requires Type1 () -> (optional Type1) @type create2<#y> #y requires #x #y allows T2 #y defines T3 () -> (optional #x) @value get () -> (Type1) @value set (Type1) -> () }