import "fmt"; import "strings"; // structs are plain data struct Point { x: float; y: float; } // classes have fields and methods class Animal { name: string; age: int; fn speak() -> string { return "..."; } fn describe() -> string { return "I am " + self.name; } } class Dog { name: string; age: int; fn speak() -> string { return "Woof!"; } fn fetch(item: string) -> string { return self.name + " fetched the " + item; } } // basic function fn add(a: int, b: int) -> int { return a + b; } // optional return type fn find(name: string) -> string? { if name == "mist" { return name; } return null; } // array types fn sum(numbers: [int]) -> int { let total: int = 0; for n in numbers { total = total + n; } return total; } // multiple params, no return fn greet(first: string, last: string) { let full: string = first + " " + last; print(full); } // structs initialized with fields fn make_point(x: float, y: float) -> Point { return Point { x: x, y: y, }; } // if / else fn classify(n: int) -> string { if n < 0 { return "negative"; } else { return "positive"; } } // entry point fn main() { // variables let x: int = 10; let y: int = 20; let result: int = add(x, y); // inferred (no type annotation) let message = "Hello from Mist!"; print(message); // struct usage let p: Point = make_point(1.5, 2.5); print(p.x); // class usage let dog: Dog = Dog { name: "Rex", age: 3, }; print(dog.speak()); print(dog.fetch("ball")); // arrays let nums: [int] = [1, 2, 3, 4, 5]; let total: int = sum(nums); print(total); // for loop for n in nums { print(n); } // optional let found: string? = find("mist"); if found { print(found); } }