interface MyAdd { _: Output fn my_add(A B) -> [Output] } struct Point { pub u64: x pub u64: y } impl MyAdd { u64: Output fn my_add(u64 u64) -> [u64] { + } } impl MyAdd { u64: Output fn my_add(u8: left u64: right) -> [u64] { left cast(u64) right + } } impl MyAdd { u64: Output fn my_add(u64 u8) -> [u64] { cast(u64) + } } impl MyAdd { Point: Output fn my_add(Point:left Point: right) -> [Point] { left::x right::x + left::y right::y + cast(Point) } } fn main() { 1 2 my_add println 1u8 2 my_add println 1 2u8 my_add println 3 4 cast(Point) 1 2 cast(Point) my_add as [p] "Point(" print p::x print ", " print p::y print ")" println }