@value interface Interface1<#x|> { } concrete Type1<#x|> { #x allows Interface1<#x> } @type interface Interface2<#x|> { } concrete Type2<|#x> { #x defines Interface2<#x> } @value interface Interface3<#x|> { } concrete Type3<|#x> { #x requires Interface3<#x> }