Tipos algebraicos: tipo

Forja permite definir tipos algebraicos (enums) con la palabra clave tipo. Son ideales para representar datos que pueden tomar diferentes formas, como el resultado de una operación o los estados de un proceso.

💡 Analogía: Un tipo algebraico es como una lista de opciones donde cada opción puede llevar datos adicionales. En Rust se llaman enum, en Haskell "tipos suma".

Sintaxis

📐 Estructura
tipo Nombre = Variante1 | Variante2 | Variante3(Tipo1, Tipo2)

Ejemplos

🎯 Opción con datos
// Tipo Opcion: puede ser Algo (con un valor) o Nada
tipo Opcion = Algo | Nada

// Tipo Resultado: Exito con valor, o Error con mensaje
tipo Resultado = Exito(Entero) | Error(Texto)

// Tipo Color: variantes sin datos extra
tipo Color = Rojo | Verde | Azul

Uso con coincidir

Los tipos algebraicos se usan junto con coincidir para hacer pattern matching:

🔀 Ejemplo completo
tipo Resultado = Exito(Entero) | Error(Texto)

funcion dividir(a, b) {
    si (b == 0) {
        retornar Error("No se puede dividir por cero")
    } sino {
        retornar Exito(a / b)
    }
}

variable res = dividir(10, 2)

coincidir (res) {
    caso Exito(valor) → {
        escribir("Resultado: " + valor)
    }
    caso Error(msg) → {
        escribir("Error: " + msg)
    }
}
// → Resultado: 5

Equivalencia con Rust

ForjaRust
tipo Opcion = Algo | Nadaenum Opcion { Algo, Nada }
tipo Resultado = Exito(Entero) | Error(Texto)enum Resultado { Exito(i64), Error(String) }
Algo(42)Opcion::Algo(42)
caso Algo(n) → { ... }Opcion::Algo(n) => { ... }
⚠️ Estado: Los tipos algebraicos están definidos a nivel de AST y lexer. El soporte completo en la VM y transpilador está en desarrollo.