class Test { function : Main(args : String[]) ~ Nil { Vec2->New(5, 7)->Add(Vec2->New(2, 3))->ToString()->PrintLine(); Vec2->New(5, 7)->Sub(Vec2->New(2, 3))->ToString()->PrintLine(); Vec2->New(5, 7)->Mult(11)->ToString()->PrintLine(); Vec2->New(5, 7)->Div(2)->ToString()->PrintLine(); } } class Vec2 { @x : Float; @y : Float; New(x : Float, y : Float) { @x := x; @y := y; } method : GetX() ~ Float { return @x; } method : GetY() ~ Float { return @y; } method : public : Add(v : Vec2) ~ Vec2 { return Vec2->New(@x + v->GetX(), @y + v->GetY()); } method : public : Sub(v : Vec2) ~ Vec2 { return Vec2->New(@x - v->GetX(), @y - v->GetY()); } method : public : Div(val : Float) ~ Vec2 { return Vec2->New(@x / val, @y / val); } method : public : Mult(val : Float) ~ Vec2 { return Vec2->New(@x * val, @y * val); } method : public : ToString() ~ String { return "[{$@x}, {$@y}]"; } }