09 · Estructuras de Datos
Newtypes escalares validados
Un newtype con where incorpora el predicado a la construcción. Su constructor new devuelve Result; trata el fallo o propágalo. Las operaciones derivadas mantienen la validación. Un newtype sin where conserva su constructor directo.
En esta página
Un newtype con where incorpora el predicado a la construcción. Su constructor new devuelve Result; trata el fallo o propágalo. Las operaciones derivadas mantienen la validación. Un newtype sin where conserva su constructor directo.
Ejemplo completo
Newtypes escalares validados.
19-validated-newtypes.zolo
// Validation is part of construction: .new returns Result<Score, str>.
newtype Score(int) deriving Eq, Ord, Clone, Default, Add where |v| 0 <= v <= 100
newtype Positive(int) where |v| v > 0
newtype UserId(int)
let score = Score.new(40).unwrap()
let delta = Score.new(2).unwrap()
print(score.unwrap()) // expected: 40
print((score + delta).unwrap()) // expected: 42
print(score.clone() == score) // expected: true
print(Score.default().unwrap()) // expected: 0
print(Score.new(101).is_err()) // expected: true
print(Positive.new(0).is_err()) // expected: true
// Ordinary newtypes still construct directly.
print(UserId.new(7).unwrap()) // expected: 7
Reglas y comportamiento
Validación, esquemas y unidades · Documentación
Desde un checkout del repositorio:
zolo examples/features/01-syntax-and-types/19-validated-newtypes.zolo
Consulta también