@type interface Equals<#x|> {} @value interface Function<#y|#z> {} concrete Value0<#t,#w> { #t allows #w #t requires Function<#t,#w> #w requires #t #w defines Equals<#w> } @value interface Value1 { refines Function } concrete Value2 { refines Value3 defines Equals } concrete Value3 { refines Value1 }