@type interface Type1 {} @value interface Type2 {} @value interface Type3 {} concrete Type4<#x> { #x requires Type2 #x allows Type3 #x defines Type1 @type something<#y> #y allows Type3 #y defines Type1 () -> (Type4<#y>) }