Cats é uma biblioteca que fornece abstrações para programação funcional na linguagem de programação Scala.
Scala suporta programação funcional e orientada a objetos, e isso se reflete na abordagem híbrida da biblioteca padrão. Cats se esforça para fornecer abstrações de programação funcional que sejam básicas, compatíveis com binários, modulares, acessíveis e eficientes. Um objetivo mais amplo do Cats é fornecer uma base para um ecossistema de bibliotecas puras e tipificadas para suportar a programação funcional em aplicações Scala.
Para mais detalhes sobre as motivações de Cats, clique aqui.
O nome é uma abreviação lúdica da palavra categoria , de "teoria da categoria".
Independentemente disso, você não precisa saber nada sobre teoria das categorias para usar Cats.
Este projeto existe graças a todas as pessoas que contribuem. Agradecemos contribuições para o Cats e adoraríamos que você ajudasse a construir o Cats. Consulte nosso guia do contribuidor para obter mais informações sobre como você pode se envolver como desenvolvedor. Se você está procurando algo para começar, aqui está uma lista amigável para iniciantes.
Torne-se um contribuidor financeiro e ajude-nos a sustentar nossa comunidade. As doações apoiam diretamente o horário de expediente dos mantenedores, melhor documentação e iniciativas estratégicas.
O patrocínio Platinum começa em US$ 950/mês.
Patrocinadores Platinum aparecem aqui em https://typelevel.org/cats
O patrocínio Gold começa em US$ 420/mês.
Patrocinadores Ouro aparecem aqui em https://typelevel.org/cats
O patrocínio Silver começa em US$ 180/mês.
Os patrocinadores Silver aparecem aqui em https://typelevel.org/cats
Torne-se um Apoiador com uma doação recorrente de apenas US$ 5/mês.
Os apoiadores aparecem aqui em https://typelevel.org/cats
Felizmente, também aceitamos contribuições únicas e recorrentes.
Outros colaboradores aparecem aqui em https://typelevel.org/cats
<script src="/cats/js/sponsors.js"></script>
Cats está disponível para Scala.js e Scala Native, bem como para o tempo de execução JVM padrão.
Cats depende de inferência de tipo aprimorada por meio da correção para SI-2712, que não está habilitada por padrão. Para Scala 2.12 você deve adicionar o seguinte ao seu build.sbt
:
scalacOptions += "-Ypartial-unificação"
(A unificação parcial está ativada por padrão desde Scala 2.13, o compilador não aceita mais -Ypartial-unification
)
E então crie a dependência Cats, adicionando o seguinte ao seu build.sbt
:
bibliotecaDependencies += "org.typelevel" %% "cats-core" % "2.9.0"
Isso puxará o módulo cats-core. Se precisar de alguma outra funcionalidade, você pode escolher entre estes módulos (usados no lugar de "cats-core"
):
cats-kernel
: Pequeno conjunto de classes de tipo básico ( obrigatório ).
cats-core
: A maioria das classes e funcionalidades do tipo principal ( obrigatório ).
cats-laws
: Leis para testar instâncias de classe de tipo.
cats-free
: Estruturas gratuitas como free monad e classes de tipo de suporte.
cats-testkit
: lib para escrever testes para instâncias de classe de tipo usando leis.
algebra
: digite classes para representar estruturas algébricas.
alleycats-core
: Instâncias e classes de gatos que não são legais.
Existem vários outros módulos Cats que estão em repositórios separados para que possam manter ciclos de lançamento independentes.
cats-effect
: tipo IO
padrão junto com classes de tipo Sync
, Async
e Effect
cats-mtl
: classes de tipo de transformador para mônadas, aplicativos e functores de gatos.
mouse
: um pequeno companheiro para Cats que fornece sintaxe conveniente (também conhecido como métodos de extensão)
kittens
: derivação automática de instância de classe de tipo para gatos e funções utilitárias genéricas
cats-tagless
: utilitários para álgebras codificadas finais sem tags
cats-collections
: Estruturas de dados que facilitam a programação funcional pura
cats-testkit-scalatest
: Integração do kit de teste Cats com Scalatest
As notas de versão anteriores do Cats estão disponíveis em CHANGES.md.
Links:
Site: typelevel.org/cats/
ScalaDoc: typelevel.org/cats/api/
Classes de tipo: typelevel.org/cats/typeclasses.html
Tipos de dados: typelevel.org/cats/datatypes.html
Visão geral da álgebra: typelevel.org/cats/algebra.html
Glossário: typelevel.org/cats/nomenclature.html
Recursos para alunos: typelevel.org/cats/resources_for_learners.html
Perguntas frequentes: typelevel.org/cats/faq.html
O ecossistema Typelevel: typelevel.org/cats/typelevelEcosystem.html
A discussão sobre Cats está acontecendo atualmente em questões do GitHub, páginas de relações públicas e Discord:
O Typelevel Discord possui canais #cats e #cats-dev, bem como canais comunitários como #beginners. Por favor, junte-se a nós!
Espera-se que as pessoas sigam o Código de Conduta Scala ao discutir Cats no GitHub, Discord ou outros locais.
Esperamos que nossa comunidade seja respeitosa, prestativa e gentil. Se você se encontrar envolvido em uma situação que esquenta ou que não atende às nossas expectativas, você deve se desligar e entrar em contato com um dos mantenedores do projeto em particular. Esperamos evitar que pequenas agressões e mal-entendidos se transformem em problemas maiores.
Se você estiver sendo assediado, entre em contato imediatamente com um de nós para que possamos apoiá-lo.
Após o lançamento 1.0.0
, decidimos usar o MAJOR.MINOR.PATCH Semantic Versioning 2.0.0 daqui para frente, que é diferente do esquema EPOCH.MAJOR.MINOR comum entre as bibliotecas Java e Scala (incluindo a linguagem Scala).
Cats se esforça para fornecer uma base sólida e estável para um ecossistema de bibliotecas de FP. Assim, tratamos a manutenção da compatibilidade binária com alta prioridade. No versionamento semântico, alterações inversas SÓ são permitidas entre versões PRINCIPAIS . Manteremos a compatibilidade binária retroativa entre as versões PATCH E MINOR . Por exemplo, quando lançarmos Cats 1.1.0
, ele será compatível com versões anteriores do binário 1.0.x
Ou seja, o novo JAR substituirá o antigo. Isso é crítico quando seu aplicativo tem uma dependência de diamante em Cats - dependendo de duas ou mais bibliotecas que dependem de Cats. Se uma biblioteca for atualizada para o novo 1.1.0
Cats antes da outra, seu aplicativo ainda será executado graças a essa compatibilidade binária com versões anteriores.
Também vale a pena notar que, de acordo com o versionamento semântico, a versão MINOR Y (xYz | x > 0) DEVE ser incrementada se uma nova funcionalidade compatível com versões anteriores for introduzida na API pública. DEVE ser incrementado se qualquer funcionalidade da API pública estiver marcada como obsoleta.
Quaisquer alterações significativas no binário exigirão um aumento de versão PRINCIPAL , sobre o qual seremos muito cautelosos. Também consideraremos o uso organization
e do nome do pacote para versões principais no futuro. Mas essa decisão ainda não foi tomada.
Uma lista (não exaustiva) de empresas que usam Cats na produção é apresentada em ADOPTERS.md. Não vê o seu? Você pode adicioná-lo em um PR! E se você puder, considere nos apoiar.
Os mantenedores atuais (pessoas que podem mesclar solicitações pull) são:
Rossabaker Ross Baker
armanbilge
johnynek P. Oscar Boykin
adelbertc Adelbert Chang
danicheg Daniel Esik
LukaJCB Luka Jacobowitz
Peter Neyens
tpolecat Rob Norris
não Erik Osheim
Barambani Filippo Mariotti
mpilquist Michael Pilquist
Miles Sabin Miles Sabin
djspiewak Daniel Spiewak
Thomas Frank Thomas
satorg Sergey Torgashov
julien-truffaut Julien Truffaut
Kailuowang Kailuo Wang
Os committers aposentados incluem:
ceedubs Cody Allen
Travis Brown Travis Brown
Atualmente, estamos seguindo a prática de exigir pelo menos duas aprovações para mesclar PRs de código (e para questões grandes ou controversas, podemos esperar por mais). Para erros de digitação, melhorias na documentação ou pequenas correções de compilação, reduzimos isso para uma única assinatura. Mais detalhes no documento do processo.
Todo o código está disponível sob a licença MIT, disponível em http://opensource.org/licenses/mit-license.php e também no arquivo COPYING. O design é informado por muitos outros projetos, em particular Scalaz.
Direitos autorais dos mantenedores, 2015-2024.