Slide 12 de 37

Tipos declarados

Um struct
type User {
	id:   Int
	name: Str
}

proc main(): void {
	u := User(1, "ada")
	echo u.name
}
Uma união com tag
type Shape {
	Circle    { radius: Int }
	Rectangle { width: Int, height: Int }
	Point
}

proc main(): void {
	p := Shape.Circle(5)
	echo p
}
Um type sem variantes é um struct; com variantes, uma união com tag. Um campo declarado fora de qualquer variante é adicionado a todas as variantes. Um valor é construído chamando o type ou a variante: User(1, "ada"), Shape.Circle(5). Não existe subtipagem nem interface — uma variante é uma forma de construir e combinar uma união, não um tipo próprio.