Cats — это библиотека, предоставляющая абстракции для функционального программирования на языке программирования Scala.
Scala поддерживает как объектно-ориентированное, так и функциональное программирование, и это отражено в гибридном подходе стандартной библиотеки. Cats стремится предоставить абстракции функционального программирования, которые являются базовыми, двоично совместимыми, модульными, доступными и эффективными. Более широкая цель Cats — создать основу для экосистемы чистых типизированных библиотек для поддержки функционального программирования в приложениях Scala.
Более подробную информацию о мотивации кошек можно найти здесь.
Название представляет собой игривое сокращение слова «категория » от «теории категорий».
В любом случае, вам не нужно ничего знать о теории категорий, чтобы использовать Cats.
Этот проект существует благодаря всем людям, которые вносят свой вклад. Мы приветствуем вклад в Cats и будем рады, если вы поможете создать Cats. Дополнительную информацию о том, как вы можете принять участие в качестве разработчика, см. в нашем руководстве для участников. Если вы ищете, с чего начать, вот список, удобный для новичков.
Станьте финансовым спонсором и помогите нам поддержать наше сообщество. Пожертвования напрямую поддерживают рабочее время сопровождающих, улучшают документацию и стратегические инициативы.
Платиновое спонсорство начинается с 950 долларов США в месяц.
Платиновые спонсоры появляются здесь: https://typelevel.org/cats.
Золотое спонсорство начинается с 420 долларов США в месяц.
Золотые спонсоры появляются здесь: https://typelevel.org/cats.
Серебряное спонсорство начинается от 180 долларов США в месяц.
Серебряные спонсоры появляются здесь: https://typelevel.org/cats.
Станьте спонсором, делая регулярное пожертвование всего в размере 5 долларов США в месяц.
Спонсоры появляются здесь: https://typelevel.org/cats.
Мы с благодарностью принимаем как разовые, так и периодические пожертвования.
Другие участники появляются здесь, на https://typelevel.org/cats.
<script src="/cats/js/sponsors.js"></script>
Cats доступен для Scala.js и Scala Native, а также для стандартной среды выполнения JVM.
Cats использует улучшенный вывод типов благодаря исправлению для SI-2712, которое по умолчанию не включено. Для Scala 2.12 вам следует добавить в build.sbt
следующее:
scalacOptions += "-Yчастичное объединение"
(Частичная унификация включена по умолчанию, начиная с Scala 2.13, компилятор больше не принимает -Ypartial-unification
)
А затем создайте зависимость Cats, добавив в build.sbt
следующее:
LibraryDependities += "org.typelevel" %% "cats-core" % "2.9.0"
Это включит модуль Cats-Core. Если вам нужны какие-то другие функции, вы можете выбрать один из этих модулей (используется вместо "cats-core"
):
cats-kernel
: Небольшой набор классов базового типа ( обязательно ).
cats-core
: большинство основных классов и функций типов ( обязательно ).
cats-laws
: законы для тестирования экземпляров типового класса.
cats-free
: свободные структуры, такие как свободная монада и поддерживающие классы типов.
cats-testkit
: библиотека для написания тестов для экземпляров классов типов с использованием законов.
algebra
: введите классы для представления алгебраических структур.
alleycats-core
: экземпляры и классы Cat, которые являются незаконными.
Есть несколько других модулей Cats, которые находятся в отдельных репозиториях, чтобы они могли поддерживать независимые циклы выпуска.
cats-effect
: стандартный тип IO
вместе с классами типов Sync
, Async
и Effect
.
cats-mtl
: классы типов-трансформеров для кошачьих монад, аппликативов и функторов.
mouse
: небольшой помощник Cats, обеспечивающий удобный синтаксис (также известный как методы расширения)
kittens
: автоматическое создание экземпляра класса типа для Cats и общие служебные функции
cats-tagless
: Утилиты для окончательно закодированных алгебр без тегов.
cats-collections
: структуры данных, которые облегчают чисто функциональное программирование.
cats-testkit-scalatest
: интеграция тестового набора Cats со Scalatest.
Примечания к предыдущим версиям Cats доступны на сайте CHANGES.md.
Ссылки:
Сайт: typelevel.org/cats/.
ScalaDoc: typelevel.org/cats/api/
Классы типов: typelevel.org/cats/typeclasses.html.
Типы данных: typelevel.org/cats/datatypes.html.
Обзор алгебры: typelevel.org/cats/algebra.html.
Глоссарий: typelevel.org/cats/nomenclature.html.
Ресурсы для учащихся: typelevel.org/cats/resources_for_learners.html
Часто задаваемые вопросы: typelevel.org/cats/faq.html.
Экосистема уровней типов: typelevel.org/cats/typelevelEcosystem.html.
Дискуссии вокруг Cats в настоящее время ведутся на GitHub, PR-страницах и Discord:
На Typelevel Discord есть каналы #cats и #cats-dev, а также каналы сообщества, такие как #beginners. Пожалуйста, присоединяйтесь к нам!
Ожидается, что люди будут следовать Кодексу поведения Scala при обсуждении Cats на GitHub, Discord или других площадках.
Мы надеемся, что наше сообщество будет уважительным, полезным и добрым. Если вы оказались втянуты в ситуацию, которая становится накаленной или не оправдывает наших ожиданий, вам следует отказаться от участия и связаться с одним из сопровождающих проекта конфиденциально. Мы надеемся избежать перерастания мелких агрессий и недоразумений в более крупные проблемы.
Если вас преследуют, немедленно свяжитесь с одним из нас, чтобы мы могли вас поддержать.
После выпуска 1.0.0
мы решили в дальнейшем использовать семантическое управление версиями MAJOR.MINOR.PATCH версии 2.0.0, которое отличается от схемы EPOCH.MAJOR.MINOR, распространенной среди библиотек Java и Scala (включая язык Scala).
Cats стремится обеспечить прочную и стабильную основу для экосистемы библиотек FP. Таким образом, мы относимся к обеспечению обратной двоичной совместимости с высоким приоритетом. При семантическом управлении версиями обратные изменения разрешены ТОЛЬКО между ОСНОВНЫМИ версиями. Мы будем поддерживать обратную бинарную совместимость между версиями PATCH и MINOR . Например, когда мы выпустим Cats 1.1.0
, она будет обратно двоично совместима с предыдущими версиями 1.0.x
IE новый JAR будет заменой старого. Это очень важно, когда ваше приложение имеет алмазную зависимость от Cats — в зависимости от двух или более библиотек, которые все зависят от Cats. Если одна библиотека обновится до новой версии 1.1.0
Cats раньше другой, ваше приложение все равно будет работать благодаря обратной двоичной совместимости.
Также стоит отметить, что в соответствии с семантическим управлением версиями МИНОРНАЯ версия Y (xYz | x > 0) ДОЛЖНА быть увеличена, если в общедоступный API вводится новая, обратно совместимая функциональность. Его ДОЛЖНО быть увеличено, если какая-либо функциональность общедоступного API помечена как устаревшая.
Любые критические бинарные изменения потребуют БОЛЬШОГО обновления версии, к чему мы будем очень осторожны. В будущем мы также рассмотрим возможность использования названия organization
и пакета для основных версий. Но это решение еще не принято.
На сайте ADOPTERS.md представлен (неполный) список компаний, использующих Cats в производстве. Не видите свой? Вы можете добавить это в пиар! И если можете, подумайте о том, чтобы поддержать нас.
Текущие сопровождающие (люди, которые могут объединять запросы на извлечение):
Россабейкер Росс Бейкер
Арман Бильге Арман Бильге
Джоннек П. Оскар Бойкин
adelbertc Адельберт Чанг
даничег Даниил Есик
LukaJCB Лука Якобовиц
Питер Нейенс Питер Нейенс
tpolecat Роб Норрис
не Эрик Осхайм
барамбани Филиппо Мариотти
mpilquist Майкл Пилквист
Milessabin Майлз Сабин
djspiewak Дэниел Спивак
Фтомас Фрэнк Томас
саторг Сергей Торгашов
Жюльен Трюффо Жюльен Трюффо
Кайлуованг Кайлуо Ван
К числу вышедших на пенсию коммиттеров относятся:
ceedubs Коди Аллен
ТрэвисБраун Трэвис Браун
В настоящее время мы придерживаемся практики, требующей как минимум двух согласований для объединения запросов на код (а в случае крупных или спорных вопросов мы можем подождать большего). В случае опечаток, улучшений документации или незначительных исправлений сборки мы ограничиваем это до одного утверждения. Более подробная информация в документе процесса.
Весь код доступен вам по лицензии MIT, доступной по адресу http://opensource.org/licenses/mit-license.php, а также в файле COPYING. В дизайне использованы многие другие проекты, в частности Scalaz.
Авторские права принадлежат сопровождающим, 2015–2024 гг.