¡Excelente iniciativa! Usar Scala 3, con su potente sistema de tipos (incluyendo traits, intersection types, extension methods, context functions y given
/using
), es una forma muy elegante y rigurosa de formalizar conceptos algebraicos. El enfoque de "type classes" encaja perfectamente aquí.
El repositorio que mencionas parece un buen punto de partida, probablemente definiendo estructuras básicas como Semigrupos, Monoides y Grupos. Para continuar y definir estructuras más complejas como los anillos, seguirías construyendo sobre esas bases.
Cómo Continuar - Pasos Generales:
- Jerarquía de Traits: Define cada estructura algebraica como un
trait
. Las estructuras más complejas heredarán (extends
) de las más simples. Por ejemplo, unRing
extenderá (de alguna forma) las propiedades de unAbelianGroup
(para la suma) y unMonoid
(para la multiplicación). - Métodos y Operadores: Usa
extension methods
dentro de los traits para definir las operaciones binarias (+, *) y unarias (-) de