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
| Forja | Rust |
|---|---|
tipo Opcion = Algo | Nada | enum 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.