// 12-type.fitz — Tipos custom: declaración, instanciación y campos.
// Cubierto en el capítulo 12 de la guía.

type User {
    id: Int
    name: Str
    email: Str?
    active: Bool = true
}

type Config {
    host: Str
    port: Int = 3000
    debug: Bool = false
}

// Instanciar — los campos van entre llaves, separados por coma o newline.
let u = User { id: 1, name: "Fitz", email: "fitz@example.com" }

// Acceso a campos con `.`.
print(u.name)
print(u.email)

// Defaults: si omitís un campo con default, se aplica.
let c = Config { host: "localhost" }
print(c.port)

// Nullables: si omitís un campo `Tipo?`, queda null.
let anon = User { id: 2, name: "Anon" }
print(anon.email)

// Imprimir una instancia entera muestra el formato canónico.
print(u)
print(c)
