Cats 是一个为 Scala 编程语言中的函数式编程提供抽象的库。
Scala 同时支持面向对象和函数式编程,这反映在标准库的混合方法中。 Cats 致力于提供核心、二进制兼容、模块化、平易近人且高效的函数式编程抽象。 Cats 更广泛的目标是为纯类型库生态系统提供基础,以支持 Scala 应用程序中的函数式编程。
有关猫的动机的更多详细信息,请访问此处。
这个名字是“category ”这个词的有趣缩写,来自“范畴论”。
无论如何,您不需要了解任何关于范畴论的知识就可以使用 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 += "-Ypartial-unification"
(从 Scala 2.13 开始默认启用部分统一,编译器不再接受-Ypartial-unification
)
然后通过将以下内容添加到build.sbt
来创建 Cats 依赖项:
库依赖项 += "org.typelevel" %% "cats-core" % "2.9.0"
这将拉入 cats-core 模块。如果您需要一些其他功能,您可以从这些模块中进行选择(用于代替"cats-core"
):
cats-kernel
:一小组基本类型类(必需)。
cats-core
:大多数核心类型类和功能(必需)。
cats-laws
:测试类型类实例的法律。
cats-free
:自由结构,例如自由 monad 和支持类型类。
cats-testkit
:用于使用法律为类型类实例编写测试的库。
algebra
:键入类来表示代数结构。
alleycats-core
:不合法的猫实例和类。
还有其他几个 Cats 模块位于单独的存储库中,以便它们可以保持独立的发布周期。
cats-effect
:标准IO
类型以及Sync
、 Async
和Effect
类型类
cats-mtl
:Cats 的 Monad、Applicatives 和 Functor 的转换器类型类。
mouse
:Cats 的一个小伴侣,提供方便的语法(也称为扩展方法)
kittens
:Cats 的自动类型类实例派生和通用实用函数
cats-tagless
:无标签最终编码代数的实用程序
cats-collections
:促进纯函数式编程的数据结构
cats-testkit-scalatest
:Cats testkit 与 Scalatest 集成
CHANGES.md 中提供了 Cats 过去的发行说明。
链接:
网站: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 生态系统:typelevel.org/cats/typelevelEcosystem.html
目前,有关 Cats 的讨论正在 GitHub issues、PR 页面和 Discord 上进行:
Typelevel Discord 有 #cats 和 #cats-dev 频道,以及社区频道,例如 #beginners。 请加入我们!
人们在 GitHub、Discord 或其他场所讨论 Cats 时应遵循 Scala 行为准则。
我们希望我们的社区能够互相尊重、乐于助人、友善。如果您发现自己陷入了激烈的局面,或者未能达到我们的期望,您应该脱离并私下联系项目维护人员之一。我们希望避免让轻微的侵犯和误解升级为更大的问题。
如果您受到骚扰,请立即联系我们,以便我们为您提供支持。
1.0.0
版本发布后,我们决定继续使用MAJOR.MINOR.PATCH语义版本控制 2.0.0,这与 Java 和 Scala 库(包括 Scala lang)中常见的EPOCH.MAJOR.MINOR方案不同。
Cats 致力于为 FP 库生态系统提供坚实稳定的基础。因此,我们高度重视向后二进制兼容性维护。在语义版本控制中,仅在主要版本之间允许向后破坏性更改。我们将保持补丁和次要版本之间的向后二进制兼容性。例如,当我们发布 Cats 1.1.0
时,它将向后兼容之前的1.0.x
版本。 IE 新 JAR 将直接替代旧 JAR。当您的应用程序对 Cats 有钻石依赖性时,这一点至关重要 - 取决于两个或多个全部依赖于 Cats 的库。如果一个库先于另一个库升级到新的1.1.0
Cats,由于这种向后二进制兼容性,您的应用程序仍然可以运行。
另外值得注意的是,根据语义版本控制,如果向公共 API 引入新的向后兼容功能,则必须递增次要版本 Y (xYz | x > 0)。如果任何公共 API 功能被标记为已弃用,则必须递增它。
任何二进制重大更改都需要主要版本更新,对此我们将非常谨慎。我们还将考虑将来使用organization
和包名称进行主要版本控制。但该决定尚未做出。
ADOPTERS.md 中提供了在生产中使用 Cats 的公司(非详尽)列表。没有看到你的吗?您可以将其添加到 PR 中!如果可以的话,请考虑支持我们。
当前的维护者(可以合并拉取请求的人)是:
罗斯贝克 罗斯贝克
阿曼比尔格 阿曼比尔格
约翰内克·P·奥斯卡·博伊金
阿德尔伯特·张 (Adelbert Chang)
丹尼尔·埃西克
卢卡·雅各布维茨 卢卡·雅各布维茨
彼得·奈恩斯 彼得·奈恩斯
臭名昭著的罗布·诺里斯
非埃里克·奥海姆
巴兰巴尼·菲利波·马里奥蒂
迈克尔·皮尔奎斯特 (Michael Pilquist)
迈尔斯·萨宾 迈尔斯·萨宾
丹尼尔·斯皮瓦克 (Daniel Spiewak)
托马斯·弗兰克·托马斯
萨托格·谢尔盖·托尔加绍夫
朱利安·特吕弗 朱利安·特吕弗
王凯洛 王凯洛
退休的提交者包括:
科迪·艾伦 (Cody Allen)
特拉维斯·布朗 特拉维斯·布朗
我们目前遵循的做法是,要求至少两次签署才能合并代码 PR(对于大型或有争议的问题,我们可能会等待更多)。对于拼写错误、文档改进或较小的构建修复,我们将其放宽为单一签核。流程文档中有更多详细信息。
所有代码均可在 MIT 许可证下使用,可在 http://opensource.org/licenses/mit-license.php 以及 COPYING 文件中获取。该设计参考了许多其他项目,特别是 Scalaz。
维护者版权所有,2015-2024。