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。