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