Vec3 :: struct;; x: F32; y: F32; z: F32 // We can define operator overloads for arbitrary types // these are just regular lambdas/functions "+" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x+b.x, a.y+b.y, a.z+b.z} "-" :: (a: Vec3, b: Vec3): Vec3 ;; return {a.x-b.x, a.y-b.y, a.z-b.z} "-" :: (a: Vec3): Vec3 ;; return {-a.x, -a.y, -a.z} main :: (): int a := Vec3{1,1,1} b := Vec3{2,3,4} // The expressions are replaced with the defined lambdas c := a + b Assert(c.x == 3 && c.y == 4 && c.z == 5) d := -c Assert(d.x == -3 && d.y == -4 && d.z == -5) e := c - d Assert(e.x == 6 && e.y == 8 && e.z == 10) test_string := " Memes " return 0