Objects
Helix has strcuts classes, enums, and interfaces (a c++ concept). Unions are not supported yet.
// Define a structstruct Point {    var x: i32;    var y: i32;}
// Define a classclass Circle {    var center: Point;    var radius: f32;
    fn Circle(self, center: Point, radius: f32) {        self.center = center;        self.radius = radius;    }
    fn area(self) -> f32 {        return 3.14 * self.radius * self.radius;    }}
// for generics you can do thisclass <T> Boxed; // generic class
/// you can also define a constaint on generics (as long as the interface is defined or its a c++ concept)class <T impl SomeInterface> ConstrainedBoxed;fn main() {    var p: Point = Point { x: 10, y: 20 };    var c: Circle = Circle(p, 5.0);
    std::print(f"Circle area: {c.area()}");}Note a struct CAN NOT have functions, methods, or constructors; only data members and operators. Classes can have both data members and methods.
Enums are simple to define and use:
enum Color {    Red,    Green,    Blue,}
enum Something derives u8 { // underlying type u8    First  = 1,    Second = 2,    Third  = 3,}
fn main() {    var c: Color = Color::Red;    switch (c) {        case Color::Red {            std::print("Color is Red");        } case Color::Green {            std::print("Color is Green");        } case Color::Blue {            std::print("Color is Blue");        }    }}Interfaces are like c++ concepts, they define a set of methods that a class must implement to satisfy the interface.
interface Drawable {    fn draw(self);}
class Circle impl Drawable {    fn draw(self) {        std::print("Drawing a circle");    }}
fn <T impl Drawable> render(obj: T) {    obj.draw();}
fn main() {    var c: Circle = Circle();    render(c); // prints "Drawing a circle"}Interfaces right now dont support data members, only functions and operators.