Cats เป็นไลบรารีที่ให้นามธรรมสำหรับการเขียนโปรแกรมเชิงฟังก์ชันในภาษาโปรแกรม Scala
Scala รองรับทั้งการเขียนโปรแกรมเชิงวัตถุและเชิงฟังก์ชัน และสิ่งนี้สะท้อนให้เห็นในแนวทางแบบไฮบริดของไลบรารีมาตรฐาน Cats มุ่งมั่นที่จะมอบนามธรรมการเขียนโปรแกรมเชิงฟังก์ชันที่เป็นแกนหลัก เข้ากันได้กับไบนารี โมดูลาร์ เข้าถึงได้ และมีประสิทธิภาพ เป้าหมายที่กว้างขึ้นของ Cats คือการจัดหารากฐานสำหรับระบบนิเวศของไลบรารีที่มีลักษณะเฉพาะและบริสุทธิ์ เพื่อรองรับการเขียนโปรแกรมเชิงฟังก์ชันในแอปพลิเคชัน Scala
หากต้องการทราบรายละเอียดเพิ่มเติมเกี่ยวกับแรงจูงใจของ Cats โปรดไปที่นี่
ชื่อนี้เป็นการย่อคำให้สั้นลงอย่างสนุกสนานของคำว่า category จาก "ทฤษฎีหมวดหมู่"
คุณไม่จำเป็นต้องรู้อะไรเกี่ยวกับทฤษฎีหมวดหมู่เพื่อใช้ Cats
โครงการนี้เกิดขึ้นได้ต้องขอบคุณทุกคนที่มีส่วนร่วม เรายินดีต้อนรับการมีส่วนร่วมของ Cats และยินดีเป็นอย่างยิ่งสำหรับคุณที่จะช่วยสร้าง Cats ดูคู่มือผู้สนับสนุนของเราสำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการมีส่วนร่วมในฐานะนักพัฒนา หากคุณกำลังมองหาบางสิ่งบางอย่างที่จะเริ่มต้นด้วย นี่คือรายการที่เป็นมิตรสำหรับผู้เริ่มต้น
ร่วมเป็นผู้บริจาคทางการเงินและช่วยเรารักษาชุมชนของเรา การบริจาคสนับสนุนเวลาทำการโดยตรงสำหรับผู้ดูแล เอกสารที่ดีกว่า และความคิดริเริ่มเชิงกลยุทธ์
การสนับสนุนระดับแพลตตินัมเริ่มต้นที่ $950 USD/เดือน
ผู้สนับสนุนระดับ Platinum ปรากฏที่นี่ที่ https://typelevel.org/cats
Gold Sponsorship เริ่มต้นที่ $420 USD/เดือน
ผู้สนับสนุนระดับโกลด์ปรากฏที่นี่ที่ https://typelevel.org/cats
Silver Sponsorship เริ่มต้นที่ $180 USD/เดือน
ผู้สนับสนุนระดับ Silver ปรากฏที่นี่ที่ https://typelevel.org/cats
ร่วมเป็นผู้สนับสนุนด้วยการบริจาคซ้ำเพียง $5 USD/เดือน
ผู้สนับสนุนปรากฏที่นี่ที่ 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
อีกต่อไป)
จากนั้นสร้างการพึ่งพา Cats โดยเพิ่มสิ่งต่อไปนี้ใน build.sbt
ของคุณ:
ไลบรารีการพึ่งพา += "org.typelevel" %% "cats-core" % "2.9.0"
สิ่งนี้จะดึงโมดูล cats-core เข้ามา หากคุณต้องการฟังก์ชันอื่นๆ คุณสามารถเลือกและเลือกจากโมดูลเหล่านี้ (ใช้แทน "cats-core"
):
cats-kernel
: ชุดคลาสประเภทพื้นฐานชุดเล็ก ( จำเป็น )
cats-core
: คลาสประเภทคอร์และฟังก์ชันการทำงานส่วนใหญ่ ( จำเป็น )
cats-laws
: กฎหมายสำหรับการทดสอบอินสแตนซ์คลาสประเภท
cats-free
: โครงสร้างอิสระ เช่น monad ฟรี และคลาสประเภทรองรับ
cats-testkit
: lib สำหรับการเขียนการทดสอบสำหรับอินสแตนซ์คลาสประเภทโดยใช้กฎหมาย
algebra
: พิมพ์คลาสเพื่อแสดงโครงสร้างพีชคณิต
alleycats-core
: อินสแตนซ์และคลาสของ Cats ที่ผิดกฎหมาย
มีโมดูล Cats อื่นๆ อีกหลายโมดูลที่อยู่ใน repos แยกกัน เพื่อให้สามารถรักษารอบการเผยแพร่ที่เป็นอิสระได้
cats-effect
: ประเภท IO
มาตรฐานพร้อมกับคลาสประเภท Sync
, Async
และ Effect
cats-mtl
: คลาสประเภทหม้อแปลงสำหรับ Monads, Applicatives และ Functors ของ Cats
mouse
: เพื่อนตัวเล็ก ๆ ของ Cats ที่ให้ไวยากรณ์ที่สะดวก (หรือที่เรียกว่าวิธีการขยาย)
kittens
: การสืบทอดคลาสประเภทอัตโนมัติสำหรับ Cats และฟังก์ชันยูทิลิตี้ทั่วไป
cats-tagless
: ยูทิลิตี้สำหรับพีชคณิตที่เข้ารหัสขั้นสุดท้ายแบบไม่มีแท็ก
cats-collections
: โครงสร้างข้อมูลที่อำนวยความสะดวกในการเขียนโปรแกรมเชิงฟังก์ชันล้วนๆ
cats-testkit-scalatest
: การรวมชุดทดสอบ Cats กับ Scalatest
บันทึกประจำรุ่นที่ผ่านมาสำหรับ Cats มีอยู่ใน CHANGES.md
ลิงค์:
เว็บไซต์: typelevel.org/cats/
สกาลาDoc: 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, หน้าประชาสัมพันธ์ และ Discord:
Typelevel Discord มีช่อง #cats และ #cats-dev รวมถึงช่องชุมชน เช่น #beginners กรุณาเข้าร่วมกับเรา!
ผู้คนได้รับการคาดหวังให้ปฏิบัติตามหลักจรรยาบรรณของ Scala เมื่อพูดคุยเกี่ยวกับ Cats บน GitHub, Discord หรือสถานที่อื่น ๆ
เราหวังว่าชุมชนของเราจะได้รับความเคารพ ช่วยเหลือ และมีน้ำใจ หากคุณพบว่าตัวเองตกอยู่ในสถานการณ์ที่ร้อนระอุหรือไม่เป็นไปตามความคาดหวังของเรา คุณควรถอนตัวและติดต่อผู้ดูแลโครงการคนใดคนหนึ่งเป็นการส่วนตัว เราหวังว่าจะหลีกเลี่ยงการปล่อยให้ความก้าวร้าวและความเข้าใจผิดเล็กๆ น้อยๆ บานปลายเป็นปัญหาใหญ่
หากคุณถูกคุกคาม โปรดติดต่อเราทันที เพื่อให้เราสามารถช่วยเหลือคุณได้
หลังจากการเปิด 1.0.0
เราตัดสินใจใช้ MAJOR.MINOR.PATCH Semantic Versioning 2.0.0 เป็นต้นไป ซึ่งแตกต่างจากรูปแบบ EPOCH.MAJOR.MINOR ที่พบได้ทั่วไปในไลบรารี Java และ Scala (รวมถึง Scala lang)
Cats มุ่งมั่นที่จะมอบรากฐานที่มั่นคงและมั่นคงสำหรับระบบนิเวศของห้องสมุด FP ดังนั้นเราจึงให้ความสำคัญกับการบำรุงรักษาความเข้ากันได้ของไบนารีย้อนหลังโดยมีความสำคัญสูง ในการกำหนดเวอร์ชันเชิงความหมาย การเปลี่ยนแปลงแบบย้อนกลับจะได้รับอนุญาตระหว่างเวอร์ชัน MAJOR เท่านั้น เราจะรักษาความเข้ากันได้แบบไบนารีย้อนหลังระหว่างเวอร์ชัน PATCH และ MINOR ตัวอย่างเช่น เมื่อเราเปิดตัว Cats 1.1.0
มันจะเข้ากันได้กับไบนารีย้อนหลังกับเวอร์ชัน 1.0.x
ก่อนหน้า IE JAR ใหม่จะเป็นการแทนที่แบบดรอปอินสำหรับอันเก่า นี่เป็นสิ่งสำคัญเมื่อแอปพลิเคชันของคุณมีการพึ่งพาเพชรกับ Cats - ขึ้นอยู่กับไลบรารีตั้งแต่สองไลบรารีขึ้นไปที่ทั้งหมดขึ้นอยู่กับ Cats หากไลบรารีหนึ่งอัปเกรดเป็น 1.1.0
Cats ใหม่ก่อนที่ไลบรารีอื่นจะอัปเกรด แอปพลิเคชันของคุณยังคงทำงานได้ด้วยความเข้ากันได้ของไบนารี่แบบย้อนหลัง
นอกจากนี้ ที่น่าสังเกตก็คือ ตามการกำหนดเวอร์ชันเชิงความหมาย เวอร์ชัน MINOR Y (xYz | x > 0) จะต้องเพิ่มขึ้นหากมีการแนะนำฟังก์ชันการทำงานใหม่ที่เข้ากันได้แบบย้อนหลังใน API สาธารณะ จะต้องเพิ่มขึ้นหากฟังก์ชันการทำงานของ API สาธารณะใดๆ ถูกทำเครื่องหมายว่าเลิกใช้งานแล้ว
การเปลี่ยนแปลงใด ๆ ที่ทำลายไบนารีจะต้องมี เวอร์ชัน Bump ซึ่งเราจะระมัดระวังอย่างมาก นอกจากนี้เรายังจะพิจารณาใช้ชื่อ organization
และแพ็คเกจสำหรับเวอร์ชันหลักในอนาคต แต่การตัดสินใจนั้นยังไม่ได้เกิดขึ้น
รายชื่อบริษัท (โดยสังเขป) ที่ใช้ Cats ในการผลิตมีอยู่ใน ADOPTERS.md ไม่เห็นของคุณเหรอ? คุณสามารถเพิ่มในการประชาสัมพันธ์ได้! และหากทำได้ โปรดพิจารณาสนับสนุนเราด้วย
ผู้ดูแลปัจจุบัน (ผู้ที่สามารถรวมคำขอดึง) คือ:
รอสซาเบเกอร์ รอสส์ เบเกอร์
อาร์มานบิลจ์ อาร์มัน บิลจ์
จอห์นนีเน็ค พี. ออสการ์ บอยกิน
อเดลเบิร์ต อาเดลเบิร์ต ชาง
ดานิเช็ก ดาเนียล เอซิก
ลูก้า เจซีบี ลูก้า จาโคโบวิทซ์
ปีเตอร์เนเยนส์ ปีเตอร์ เนเยนส์
ตำรวจแมว Rob Norris
ไม่ใช่เอริค โอไซม์
บารัมบานี ฟิลิปโป มาริโอตติ
ไมเคิล พิลควิสต์
ไมลส์ซาบิน ไมล์ ซาบิน
ดีเจสเปียวัค แดเนียล สเปียวัค
ฟโธมัส แฟรงก์ โธมัส
ซาตอร์ก เซอร์เกย์ ทอร์กาชอฟ
จูเลียน-ทรัฟโฟต์ จูเลียน ทรัฟโฟต์
ไคลัวหวาง ไคลัวหวาง
กรรมการที่เกษียณอายุแล้วได้แก่:
ซีดูบส์ โคดี้ อัลเลน
ทราวิสบราวน์ ทราวิส บราวน์
ขณะนี้เรากำลังปฏิบัติตามหลักปฏิบัติในการกำหนดให้ต้องมีการลงชื่อออกอย่างน้อยสองครั้งเพื่อรวม PR ของโค้ด (และสำหรับปัญหาใหญ่หรือข้อโต้แย้ง เราอาจรอมากกว่านี้) สำหรับการพิมพ์ผิด การปรับปรุงเอกสาร หรือการแก้ไขบิลด์เล็กน้อย เราจะผ่อนผันให้เหลือเพียงการลงชื่อเพียงครั้งเดียว รายละเอียดเพิ่มเติมในเอกสารกระบวนการ
รหัสทั้งหมดมีให้คุณใช้งานภายใต้ใบอนุญาต MIT ซึ่งมีอยู่ที่ http://opensource.org/licenses/mit-license.php และอยู่ในไฟล์ COPYING การออกแบบได้รับแจ้งจากโครงการอื่นๆ มากมาย โดยเฉพาะ Scalaz
ลิขสิทธิ์ผู้ดูแล 2015-2024