Cats ist eine Bibliothek, die Abstraktionen für die funktionale Programmierung in der Programmiersprache Scala bereitstellt.
Scala unterstützt sowohl objektorientierte als auch funktionale Programmierung, was sich im hybriden Ansatz der Standardbibliothek widerspiegelt. Cats ist bestrebt, funktionale Programmierabstraktionen bereitzustellen, die kernkompatibel, binärkompatibel, modular, zugänglich und effizient sind. Ein umfassenderes Ziel von Cats besteht darin, eine Grundlage für ein Ökosystem reiner, typisierter Bibliotheken zur Unterstützung der funktionalen Programmierung in Scala-Anwendungen bereitzustellen.
Weitere Einzelheiten zu den Beweggründen von Cats finden Sie hier.
Der Name ist eine spielerische Verkürzung des Wortes Kategorie , von „Kategorietheorie“.
Unabhängig davon müssen Sie nichts über Kategorientheorie wissen, um Cats zu verwenden.
Dieses Projekt existiert dank aller Menschen, die dazu beitragen. Wir freuen uns über Spenden für Cats und würden uns freuen, wenn Sie beim Aufbau von Cats helfen. Weitere Informationen darüber, wie Sie sich als Entwickler engagieren können, finden Sie in unserem Leitfaden für Mitwirkende. Wenn Sie etwas für den Anfang suchen, finden Sie hier eine einsteigerfreundliche Liste.
Werden Sie ein finanzieller Spender und helfen Sie uns, unsere Gemeinschaft zu erhalten. Durch Spenden werden direkt Bürozeiten für Betreuer, eine bessere Dokumentation und strategische Initiativen unterstützt.
Das Platinum-Sponsoring beginnt bei 950 USD/Monat.
Platinum-Sponsoren erscheinen hier unter https://typelevel.org/cats
Gold-Sponsoring beginnt bei 420 USD/Monat.
Gold-Sponsoren erscheinen hier unter https://typelevel.org/cats
Silber-Sponsoring beginnt bei 180 USD/Monat.
Silbersponsoren erscheinen hier unter https://typelevel.org/cats
Werden Sie Unterstützer mit einer wiederkehrenden Spende von nur 5 USD/Monat.
Unterstützer erscheinen hier unter https://typelevel.org/cats
Gerne nehmen wir auch einmalige und wiederkehrende Spenden entgegen.
Weitere Mitwirkende erscheinen hier unter https://typelevel.org/cats
<script src="/cats/js/sponsors.js"></script>
Cats ist für Scala.js und Scala Native sowie für die Standard-JVM-Laufzeitumgebung verfügbar.
Cats setzt auf eine verbesserte Typinferenz über den Fix für SI-2712, der standardmäßig nicht aktiviert ist. Für Scala 2.12 sollten Sie Folgendes zu Ihrer build.sbt
hinzufügen:
scalacOptions += "-Ypartial-unification"
(Die teilweise Vereinheitlichung ist seit Scala 2.13 standardmäßig aktiviert, der Compiler akzeptiert -Ypartial-unification
nicht mehr.)
Und erstellen Sie dann die Cats-Abhängigkeit, indem Sie Folgendes zu Ihrer build.sbt
hinzufügen:
LibraryDependencies += "org.typelevel" %% "cats-core" % "2.9.0"
Dadurch wird das cats-core-Modul eingebunden. Wenn Sie andere Funktionen benötigen, können Sie aus diesen Modulen auswählen (die anstelle von "cats-core"
verwendet werden):
cats-kernel
: Kleiner Satz grundlegender Typklassen ( erforderlich ).
cats-core
: Die meisten Kerntypklassen und -funktionen ( erforderlich ).
cats-laws
: Gesetze zum Testen von Typklasseninstanzen.
cats-free
: Freie Strukturen wie die freie Monade und unterstützende Typklassen.
cats-testkit
: Bibliothek zum Schreiben von Tests für Typklasseninstanzen mithilfe von Gesetzen.
algebra
: Typklassen zur Darstellung algebraischer Strukturen.
alleycats-core
: Cats-Instanzen und -Klassen, die nicht rechtmäßig sind.
Es gibt mehrere andere Cats-Module, die sich in separaten Repos befinden, sodass sie unabhängige Veröffentlichungszyklen beibehalten können.
cats-effect
: Standard- IO
Typ zusammen mit den Typklassen Sync
, Async
und Effect
cats-mtl
: Transformer-Typklassen für Monaden, Applikative und Funktoren von Cats.
mouse
: ein kleiner Begleiter von Cats, der praktische Syntax (auch Erweiterungsmethoden genannt) bietet
kittens
: Automatische Ableitung von Typklasseninstanzen für Cats und generische Hilfsfunktionen
cats-tagless
: Dienstprogramme für endkodierte Algebren ohne Tags
cats-collections
: Datenstrukturen, die eine rein funktionale Programmierung ermöglichen
cats-testkit-scalatest
: Cats-Testkit-Integration mit Scalatest
Frühere Versionshinweise für Cats sind in CHANGES.md verfügbar.
Links:
Website: typelevel.org/cats/
ScalaDoc: typelevel.org/cats/api/
Typklassen: typelevel.org/cats/typeclasses.html
Datentypen: typelevel.org/cats/datatypes.html
Algebra-Übersicht: typelevel.org/cats/algebra.html
Glossar: typelevel.org/cats/nomenclature.html
Ressourcen für Lernende: typelevel.org/cats/resources_for_learners.html
FAQ: typelevel.org/cats/faq.html
Das Typelevel-Ökosystem: typelevel.org/cats/typelevelEcosystem.html
Diskussionen rund um Cats finden derzeit auf GitHub-Themen, PR-Seiten und Discord statt:
Der Typelevel Discord verfügt über die Kanäle #cats und #cats-dev sowie Community-Kanäle wie #beginners. Bitte machen Sie mit!
Von den Leuten wird erwartet, dass sie den Scala-Verhaltenskodex befolgen, wenn sie auf GitHub, Discord oder anderen Orten über Katzen diskutieren.
Wir hoffen, dass unsere Community respektvoll, hilfsbereit und freundlich ist. Wenn Sie sich in einer Situation befinden, die eskaliert oder unsere Erwartungen nicht erfüllt, sollten Sie sich zurückziehen und unter vier Augen einen der Projektbetreuer kontaktieren. Wir hoffen zu vermeiden, dass kleinere Aggressionen und Missverständnisse zu größeren Problemen eskalieren.
Wenn Sie belästigt werden, wenden Sie sich bitte umgehend an einen von uns, damit wir Sie unterstützen können.
Nach der Veröffentlichung 1.0.0
haben wir uns entschieden, künftig MAJOR.MINOR.PATCH Semantic Versioning 2.0.0 zu verwenden, das sich vom EPOCH.MAJOR.MINOR -Schema unterscheidet, das in Java- und Scala-Bibliotheken (einschließlich der Scala-Sprache) üblich ist.
Cats ist bestrebt, eine solide und stabile Grundlage für ein Ökosystem von FP-Bibliotheken zu schaffen. Daher behandeln wir die Wartung der Abwärtsbinärkompatibilität mit hoher Priorität. Bei der semantischen Versionierung ist eine rückwärtsgerichtete Änderung NUR zwischen MAJOR -Versionen zulässig. Wir werden die Abwärtskompatibilität zwischen PATCH- und MINOR -Versionen aufrechterhalten. Wenn wir beispielsweise Cats 1.1.0
veröffentlichen, wird es abwärtsbinärkompatibel mit den vorherigen Versionen 1.0.x
sein. Dh das neue JAR wird ein direkter Ersatz für das alte sein. Dies ist von entscheidender Bedeutung, wenn Ihre Anwendung eine Diamond-Abhängigkeit von Cats aufweist – abhängig von zwei oder mehr Bibliotheken, die alle von Cats abhängen. Wenn eine Bibliothek vor der anderen auf die neue 1.1.0
aktualisiert wird, läuft Ihre Anwendung dank dieser Abwärtskompatibilität weiterhin.
Erwähnenswert ist auch, dass gemäß der semantischen Versionierung die MINOR -Version Y (xYz | x > 0) inkrementiert werden MUSS, wenn neue, abwärtskompatible Funktionen in die öffentliche API eingeführt werden. Es MUSS erhöht werden, wenn eine öffentliche API-Funktionalität als veraltet markiert ist.
Alle bahnbrechenden Binäränderungen erfordern einen GROßEN Versionssprung, bei dem wir sehr vorsichtig sein werden. Wir werden in Zukunft auch die Verwendung organization
und Paketnamen für die Hauptversionierung in Betracht ziehen. Aber diese Entscheidung steht noch aus.
Eine (nicht erschöpfende) Liste von Unternehmen, die Cats in der Produktion einsetzen, finden Sie in ADOPTERS.md. Siehst du deine nicht? Sie können es in einer PR hinzufügen! Und wenn Sie können, denken Sie darüber nach, uns zu unterstützen.
Die aktuellen Betreuer (Personen, die Pull-Anfragen zusammenführen können) sind:
Rossabaker Ross Baker
Armanbilge Arman Bilge
Johnynek P. Oscar Boykin
adelbertc Adelbert Chang
danicheg Daniel Esik
LukaJCB Luka Jacobowitz
peterneyens Peter Neyens
Polecat Rob Norris
nicht Erik Osheim
barambani Filippo Mariotti
MPilquist Michael Pilquist
Milesabin Miles Sabin
DJSpiewak Daniel Spiewak
fthomas Frank Thomas
Satorg Sergey Torgashov
julien-truffaut Julien Truffaut
Kailuowang Kailuo Wang
Zu den pensionierten Committern gehören:
ceedubs Cody Allen
travisbrown Travis Brown
Wir verfolgen derzeit die Praxis, mindestens zwei Freigaben zu verlangen, um Code-PRs zusammenzuführen (und bei großen oder umstrittenen Problemen warten wir möglicherweise auf weitere Freigaben). Bei Tippfehlern, Dokumentationsverbesserungen oder kleineren Build-Korrekturen beschränken wir dies auf eine einmalige Freigabe. Näheres im Prozessdokument.
Der gesamte Code steht Ihnen unter der MIT-Lizenz zur Verfügung, verfügbar unter http://opensource.org/licenses/mit-license.php und auch in der COPYING-Datei. Das Design orientiert sich an vielen anderen Projekten, insbesondere an Scalaz.
Copyright der Betreuer, 2015–2024.