@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 }