Cats es una biblioteca que proporciona abstracciones para programación funcional en el lenguaje de programación Scala.
Scala admite programación funcional y orientada a objetos, y esto se refleja en el enfoque híbrido de la biblioteca estándar. Cats se esfuerza por proporcionar abstracciones de programación funcional que sean centrales, compatibles con binarios, modulares, accesibles y eficientes. Un objetivo más amplio de Cats es proporcionar una base para un ecosistema de bibliotecas tipográficas puras para respaldar la programación funcional en aplicaciones Scala.
Para obtener más detalles sobre las motivaciones de Cats, vaya aquí.
El nombre es una abreviatura divertida de la palabra categoría , de "teoría de categorías".
De todos modos, no necesitas saber nada sobre la teoría de categorías para usar Cats.
Este proyecto existe gracias a todas las personas que contribuyen. Agradecemos las contribuciones a Cats y nos encantaría que ayudaras a construir Cats. Consulte nuestra guía para colaboradores para obtener más información sobre cómo puede participar como desarrollador. Si está buscando algo con lo que empezar, aquí tiene una lista para principiantes.
Conviértase en un contribuyente financiero y ayúdenos a sostener nuestra comunidad. Las donaciones apoyan directamente el horario de oficina de los mantenedores, mejor documentación e iniciativas estratégicas.
El patrocinio Platino comienza en $950 USD/mes.
Los patrocinadores platino aparecen aquí en https://typelevel.org/cats
El patrocinio Gold comienza en $420 USD/mes.
Los patrocinadores Gold aparecen aquí en https://typelevel.org/cats
El patrocinio Plata comienza en $180 USD/mes.
Los patrocinadores Silver aparecen aquí en https://typelevel.org/cats
Conviértete en patrocinador con una donación recurrente de solo $5 USD al mes.
Los patrocinadores aparecen aquí en https://typelevel.org/cats
Afortunadamente, también aceptamos contribuciones únicas y recurrentes.
Otros contribuyentes aparecen aquí en https://typelevel.org/cats
<script src="/cats/js/sponsors.js"></script>
Cats está disponible para Scala.js y Scala Native, así como para el tiempo de ejecución estándar de JVM.
Cats se basa en una inferencia de tipos mejorada mediante la corrección para SI-2712, que no está habilitada de forma predeterminada. Para Scala 2.12 debes agregar lo siguiente a tu build.sbt
:
scalacOptions += "-Yunificación-parcial"
(La unificación parcial está activada de forma predeterminada desde Scala 2.13, el compilador ya no acepta -Ypartial-unification
)
Y luego cree la dependencia Cats agregando lo siguiente a su build.sbt
:
bibliotecaDependencies += "org.typelevel" %% "cats-core" % "2.9.0"
Esto incorporará el módulo cats-core. Si necesita alguna otra funcionalidad, puede elegir entre estos módulos (usados en lugar de "cats-core"
):
cats-kernel
: pequeño conjunto de clases de tipos básicos ( requerido ).
cats-core
: la mayoría de las funciones y clases de tipos principales ( requerido ).
cats-laws
: leyes para probar instancias de clases de tipos.
cats-free
: estructuras libres como la mónada libre y clases de tipos de apoyo.
cats-testkit
: biblioteca para escribir pruebas para instancias de clases de tipos utilizando leyes.
algebra
: clases de tipo para representar estructuras algebraicas.
alleycats-core
: Instancias y clases de Cats que no son legales.
Hay varios otros módulos Cats que se encuentran en repositorios separados para que puedan mantener ciclos de lanzamiento independientes.
cats-effect
: tipo IO
estándar junto con clases de tipo Sync
, Async
y Effect
cats-mtl
: clases de tipos de transformadores para mónadas, aplicativos y functores de Cats.
mouse
: un pequeño complemento de Cats que proporciona una sintaxis conveniente (también conocido como métodos de extensión)
kittens
: derivación automática de instancias de clases de tipos para Cats y funciones de utilidad genéricas
cats-tagless
: Utilidades para álgebras codificadas finales sin etiquetas
cats-collections
: estructuras de datos que facilitan la programación funcional pura
cats-testkit-scalatest
: Integración del kit de prueba de Cats con Scalatest
Las notas de versiones anteriores de Cats están disponibles en CHANGES.md.
Campo de golf:
Sitio web: typelevel.org/cats/
ScalaDoc: typelevel.org/cats/api/
Clases de tipos: typelevel.org/cats/typeclasses.html
Tipos de datos: typelevel.org/cats/datatypes.html
Descripción general de álgebra: typelevel.org/cats/algebra.html
Glosario: typelevel.org/cats/nomenclature.html
Recursos para estudiantes: typelevel.org/cats/resources_for_learners.html
Preguntas frecuentes: typelevel.org/cats/faq.html
El ecosistema Typelevel: typelevel.org/cats/typelevelEcosystem.html
Actualmente se está debatiendo sobre Cats en temas de GitHub, páginas de relaciones públicas y Discord:
Typelevel Discord tiene canales #cats y #cats-dev, así como canales comunitarios como #beginners. ¡Únase a nosotros!
Se espera que las personas sigan el Código de conducta de Scala cuando hablen sobre Cats en GitHub, Discord u otros lugares.
Esperamos que nuestra comunidad sea respetuosa, servicial y amable. Si se ve envuelto en una situación que se vuelve acalorada o que no cumple con nuestras expectativas, debe desconectarse y comunicarse con uno de los mantenedores del proyecto en privado. Esperamos evitar que agresiones y malentendidos menores se conviertan en problemas mayores.
Si está siendo acosado, comuníquese con uno de nosotros de inmediato para que podamos brindarle apoyo.
Después del lanzamiento 1.0.0
, decidimos usar MAJOR.MINOR.PATCH Semantic Versioning 2.0.0 en el futuro, que es diferente del esquema EPOCH.MAJOR.MINOR común entre las bibliotecas Java y Scala (incluido el idioma Scala).
Cats se esfuerza por proporcionar una base sólida y estable para un ecosistema de bibliotecas de FP. Por lo tanto, tratamos el mantenimiento de la compatibilidad binaria con versiones anteriores con alta prioridad. En el control de versiones semántico, SOLO se permiten cambios hacia atrás entre versiones PRINCIPALES . Mantendremos la compatibilidad binaria hacia atrás entre las versiones PATCH Y MENOR . Por ejemplo, cuando lancemos Cats 1.1.0
, será compatible binariamente con las versiones 1.0.x
anteriores. Es decir, el nuevo JAR será un reemplazo directo del anterior. Esto es fundamental cuando su aplicación depende en forma de diamante de Cats, es decir, depende de dos o más bibliotecas que dependen todas de Cats. Si una biblioteca se actualiza a la nueva versión 1.1.0
Cats antes que la otra, su aplicación aún se ejecuta gracias a esta compatibilidad binaria con versiones anteriores.
También vale la pena señalar que, según el control de versiones semántico, la versión MENOR Y (xYz | x > 0) DEBE incrementarse si se introduce una nueva funcionalidad compatible con versiones anteriores en la API pública. DEBE incrementarse si alguna funcionalidad de API pública está marcada como obsoleta.
Cualquier cambio importante en el binario requerirá un aumento de versión IMPORTANTE , con el que seremos muy cautelosos. También consideraremos el uso organization
y el nombre del paquete para versiones principales en el futuro. Pero esa decisión aún no se ha tomado.
En ADOPTERS.md se incluye una lista (no exhaustiva) de empresas que utilizan Cats en producción. ¿No ves el tuyo? ¡Puedes agregarlo en un PR! Y si puedes, considera apoyarnos.
Los mantenedores actuales (personas que pueden fusionar solicitudes de extracción) son:
rossabaker
armanbilge Arman sentina
johnynek p. oscar boykin
adelbertc Adelbert Chang
danicheg daniel esik
LukaJCB Luka Jacobowitz
peterneyens Peter Neyens
polecat Rob Norris
no erik osheim
barambani Filippo Mariotti
mpilquist Michael Pilquist
milessabin
Daniel Spiewak
Frank Thomas
satorg Sergey Torgashov
julien-truffaut Julien Truffaut
Kailuowang Kailuo Wang
Los comprometidos retirados incluyen:
ceedubs Cody Allen
travisbrowntravisbrown
Actualmente seguimos la práctica de exigir al menos dos aprobaciones para fusionar los RP de código (y para problemas importantes o polémicos podemos esperar más). Para errores tipográficos, mejoras en la documentación o correcciones menores de compilación, lo limitamos a una aprobación única. Más detalle en el documento del proceso.
Todo el código está disponible bajo la licencia MIT, disponible en http://opensource.org/licenses/mit-license.php y también en el archivo COPYING. El diseño se basa en muchos otros proyectos, en particular Scalaz.
Copyright los mantenedores, 2015-2024.