[X,Y|Byte == Y and Integer?(X)] overload foo(x:X, y:Y) { println("c", x, y); } [X,Y|Integer?(X) and Integer?(Y)] foo(x:X, y:Y) { println("a", x, y); } [X,Y|Byte == X and Integer?(Y)] overload foo(x:X, y:Y) { println("b", x, y); } main() { foo(1,3); foo(Byte(1),3); foo(1,Byte(3)); foo(Byte(1),Byte(3)); }