Cats est une bibliothèque qui fournit des abstractions pour la programmation fonctionnelle dans le langage de programmation Scala.
Scala prend en charge à la fois la programmation orientée objet et fonctionnelle, et cela se reflète dans l'approche hybride de la bibliothèque standard. Cats s'efforce de fournir des abstractions de programmation fonctionnelles qui sont de base, compatibles binaires, modulaires, accessibles et efficaces. Un objectif plus large de Cats est de fournir une base pour un écosystème de bibliothèques pures et typées pour prendre en charge la programmation fonctionnelle dans les applications Scala.
Pour plus de détails sur les motivations des chats, rendez-vous ici.
Le nom est un raccourci ludique du mot catégorie , de « théorie des catégories ».
Quoi qu’il en soit, vous n’avez pas besoin de connaître la théorie des catégories pour utiliser Cats.
Ce projet existe grâce à toutes les personnes qui y contribuent. Nous apprécions les contributions à Cats et serions ravis que vous aidiez à construire Cats. Consultez notre guide du contributeur pour plus d’informations sur la façon dont vous pouvez vous impliquer en tant que développeur. Si vous cherchez quelque chose pour commencer, voici une liste conviviale pour les débutants.
Devenez un contributeur financier et aidez-nous à pérenniser notre communauté. Les dons soutiennent directement les heures de bureau des responsables, une meilleure documentation et des initiatives stratégiques.
Le parrainage Platine commence à 950 $ USD/mois.
Les sponsors Platine apparaissent ici sur https://typelevel.org/cats
Le parrainage Gold commence à 420 $ USD/mois.
Les sponsors Or apparaissent ici sur https://typelevel.org/cats
Le parrainage Argent commence à 180 USD/mois.
Les sponsors Argent apparaissent ici sur https://typelevel.org/cats
Devenez un contributeur avec un don récurrent de seulement 5 USD/mois.
Les contributeurs apparaissent ici sur https://typelevel.org/cats
Nous acceptons heureusement également les contributions ponctuelles et récurrentes.
D'autres contributeurs apparaissent ici sur https://typelevel.org/cats
<script src="/cats/js/sponsors.js"></script>
Cats est disponible pour Scala.js et Scala Native, ainsi que pour le runtime JVM standard.
Cats s'appuie sur une inférence de type améliorée via le correctif pour SI-2712, qui n'est pas activé par défaut. Pour Scala 2.12, vous devez ajouter ce qui suit à votre build.sbt
:
scalacOptions += "-Ypartial-unification"
(L'unification partielle est activée par défaut depuis Scala 2.13, le compilateur n'accepte plus -Ypartial-unification
)
Et puis créez la dépendance Cats, en ajoutant ce qui suit à votre build.sbt
:
libraryDependencies += "org.typelevel" %% "cats-core" % "2.9.0"
Cela extraira le module cats-core. Si vous avez besoin d'autres fonctionnalités, vous pouvez choisir parmi ces modules (utilisés à la place de "cats-core"
) :
cats-kernel
: Petit ensemble de classes de types de base ( obligatoire ).
cats-core
: La plupart des classes de types et fonctionnalités de base ( obligatoires ).
cats-laws
: Lois pour tester les instances de classe de types.
cats-free
: structures gratuites telles que la monade gratuite et classes de types de support.
cats-testkit
: bibliothèque pour écrire des tests pour les instances de classe de types en utilisant des lois.
algebra
: tapez des classes pour représenter les structures algébriques.
alleycats-core
: instances et classes de chats qui ne sont pas légales.
Il existe plusieurs autres modules Cats qui se trouvent dans des dépôts distincts afin qu'ils puissent maintenir des cycles de publication indépendants.
cats-effect
: type IO
standard avec classes de types Sync
, Async
et Effect
cats-mtl
: classes de types de transformateurs pour les monades, applicatifs et foncteurs de chats.
mouse
: un petit compagnon de Cats qui fournit une syntaxe pratique (alias méthodes d'extension)
kittens
: dérivation automatique d'instances de classe de types pour Cats et fonctions utilitaires génériques
cats-tagless
: Utilitaires pour les algèbres codées finales sans tag
cats-collections
: Structures de données qui facilitent la programmation fonctionnelle pure
cats-testkit-scalatest
: Intégration du kit de test Cats avec Scalatest
Les notes de version antérieures pour Cats sont disponibles dans CHANGES.md.
Links:
Site Web : typelevel.org/cats/
ScalaDoc : typelevel.org/cats/api/
Classes de types : typelevel.org/cats/typeclasses.html
Types de données : typelevel.org/cats/datatypes.html
Aperçu de l'algèbre : typelevel.org/cats/algebra.html
Glossaire : typelevel.org/cats/nomenclature.html
Ressources pour les apprenants : typelevel.org/cats/resources_for_learners.html
FAQ : typelevel.org/cats/faq.html
L'écosystème Typelevel : typelevel.org/cats/typelevelEcosystem.html
Des discussions autour des chats ont actuellement lieu sur les problèmes GitHub, les pages de relations publiques et Discord :
Le Typelevel Discord propose des chaînes #cats et #cats-dev, ainsi que des chaînes communautaires telles que #beginners. S'il vous plaît, rejoignez-nous !
Les gens sont censés suivre le code de conduite Scala lorsqu'ils discutent de Cats sur GitHub, Discord ou d'autres sites.
Nous espérons que notre communauté sera respectueuse, serviable et gentille. Si vous vous retrouvez impliqué dans une situation qui s'échauffe ou qui ne répond pas à nos attentes, vous devez vous désengager et contacter l'un des responsables du projet en privé. Nous espérons éviter de laisser des agressions mineures et des malentendus dégénérer en problèmes plus importants.
Si vous êtes victime de harcèlement, veuillez contacter immédiatement l'un de nous afin que nous puissions vous aider.
Après la version 1.0.0
, nous avons décidé d'utiliser désormais MAJOR.MINOR.PATCH Semantic Versioning 2.0.0, qui est différent du schéma EPOCH.MAJOR.MINOR commun parmi les bibliothèques Java et Scala (y compris le langage Scala).
Cats s'efforce de fournir une base solide et stable pour un écosystème de bibliothèques FP. Ainsi, nous accordons une haute priorité à la maintenance de la compatibilité binaire descendante. Dans le versionnage sémantique, les changements rétrogrades sont autorisés UNIQUEMENT entre les versions MAJEURES . Nous maintiendrons la compatibilité binaire descendante entre les versions PATCH ET MINOR . Par exemple, lorsque nous publierons Cats 1.1.0
, il sera rétrocompatible binairement avec les versions 1.0.x
précédentes. IE, le nouveau JAR remplacera l’ancien. Ceci est critique lorsque votre application a une dépendance diamant sur Cats - en fonction de deux ou plusieurs bibliothèques qui dépendent toutes de Cats. Si une bibliothèque est mise à niveau vers la nouvelle version 1.1.0
Cats avant l'autre, votre application continue de fonctionner grâce à cette compatibilité binaire descendante.
Il convient également de noter que, selon le versioning sémantique, la version MINEURE Y (xYz | x > 0) DOIT être incrémentée si une nouvelle fonctionnalité rétrocompatible est introduite dans l'API publique. Il DOIT être incrémenté si une fonctionnalité de l'API publique est marquée comme obsolète.
Toute modification radicale du binaire nécessitera une modification MAJEURE de la version, à laquelle nous serons très prudents. Nous envisagerons également d'utiliser organization
et le nom du package pour les versions majeures à l'avenir. Mais cette décision n’a pas encore été prise.
Une liste (non exhaustive) des entreprises qui utilisent Cats en production est présentée dans ADOPTERS.md. Vous ne voyez pas le vôtre ? Vous pouvez l'ajouter dans un PR ! Et si vous le pouvez, pensez à nous soutenir.
Les responsables actuels (les personnes qui peuvent fusionner les demandes d'extraction) sont :
Ross Baker
Armanbilge
Johnynek P. Oscar Boykin
Adelbert Chang
Daniel Esik
LukaJCB Luka Jacobowitz
Peter Neyens
le putois Rob Norris
non Erik Osheim
barambani Filippo Mariotti
mpilquist Michael Pilquist
Miles Sabin
Daniel Spiewak
Thomas Frank Thomas
satorg Sergueï Torgashov
Julien Truffaut
Kailuo Wang
Les contributeurs retraités comprennent :
Cody Allen
Travis Brown
Nous suivons actuellement une pratique consistant à exiger au moins deux approbations pour fusionner les PR de code (et pour les problèmes importants ou controversés, nous pouvons en attendre davantage). Pour les fautes de frappe, les améliorations de la documentation ou les corrections mineures de la version, nous limitons cela à une seule approbation. Plus de détails dans le document de processus.
Tout le code est à votre disposition sous la licence MIT, disponible sur http://opensource.org/licenses/mit-license.php et également dans le fichier COPYING. La conception s'inspire de nombreux autres projets, notamment Scalaz.
Copyright les responsables, 2015-2024.