Katharos es una biblioteca de Python que combina abstracciones algebraicas —Functor, Applicative, Monad, Semigroup y Monoid— con tipos de datos inmutables y un modelo de concurrencia por paso de mensajes, todo bajo una misma idea: modelar errores, efectos y comunicación concurrente como valores componibles y seguros en tipos.
La parte funcional ofrece tipos concretos como Maybe, Result, ImmutableList e IO, pensados para evitar comprobaciones dispersas de None y bloques try/except anidados. Por ejemplo, una operación que antes requería varios return None encadenados se reduce a una función decorada con @do(Maybe) que cede cada paso con yield y se interrumpe de forma limpia al encontrar Nothing. Del mismo modo, las excepciones se modelan como Result y se encadenan con el operador |, de forma que un fallo interrumpe la composición sin levantar excepciones. El decorador Result.catch convierte funciones que lanzan excepciones en funciones que devuelven Result, conservando el traceback original.
La parte de concurrencia se apoya en el mismo núcleo funcional. El primer modelo disponible es CSP al estilo Go, con canales tipados y lanzamiento de tareas con go, pero —a diferencia de Go— las recepciones devuelven un Result, de modo que un canal cerrado o agotado por un timeout es un valor que se puede pattern-match, no una excepción. El bloque with csp.go actúa como un ámbito de concurrencia estructurada que espera a todas las tareas lanzadas dentro antes de salir. Cada modelo de concurrencia se vincula a un BaseThreadingBackend intercambiable, con hilos estándar por defecto, y la biblioteca prevé añadir más modelos, como uno de actores, sobre la misma abstracción.
Katharos se distribuye bajo licencia MIT y se instala con pip install katharos o uv add katharos. La documentación completa, con tutoriales, guías prácticas, referencia de API y fundamentos matemáticos, está disponible en katharos.readthedocs.io.
