Lightweight, modular, and extensible library for functional programming.
Scala Shell
Latest commit be176fa Jan 16, 2017 @fthomas fthomas committed on GitHub Merge pull request #1525 from Leammas/patch-1
Remove link to apply.html from menu
Permalink
Failed to load latest commit information.
bench/src/main/scala/cats/bench Fix compile error in benchmark. Aug 19, 2016
core/src/main/scala/cats Override Foldable.fold for TraversableOnce subtypes Jan 10, 2017
docs/src/main Removed link to apply.html from menu Jan 16, 2017
free/src Cofree comonad Dec 21, 2016
js/src rename cats.js.std to cats.js.instances. Sep 21, 2016
jvm/src/test/scala/cats/tests Work around cryptic scala.js compilation errors. Sep 6, 2016
kernel-laws/src Merge pull request #1415 from travisbrown/update/2.12.0-RC2 Oct 25, 2016
kernel/src/main/scala/cats/kernel Add Order.fromComparable, and use it for UUID Oct 8, 2016
laws/src Add Reducible for Eval and Id (#1475) Jan 3, 2017
macros/src/main/scala/cats/macros Add lift to FunctionK (#1352) Sep 8, 2016
project Update to Scala.js 0.6.14 Dec 30, 2016
scripts enable mima check (#1483) Dec 5, 2016
tests/src/test/scala/cats/tests Improve intercalate tests after review Jan 6, 2017
.gitignore Bumps sbt-microsites version. It brings auto-docs menu. Oct 21, 2016
.jvmopts try travis trusty beta with higher memory Sep 22, 2016
.travis.yml Update .travis.yml Dec 13, 2016
AUTHORS.md Update AUTHORS file with changes for 0.8.1 and 0.9.0 (#1523) Jan 14, 2017
CHANGES.md Add new doc PR, minor fixes, update date Jan 15, 2017
CONTRIBUTING.md Merge remote-tracking branch 'upstream/master' Sep 24, 2016
COPYING add basic license Jan 29, 2015
DESIGN.md Include kernel in modules doc Jun 27, 2016
PROCESS.md fix typo Nov 10, 2016
README.md 0 9 0 post release (#1524) Jan 16, 2017
build.sbt Use scala versions define in .travis.yml Dec 20, 2016
scalastyle-config.xml Add scalastyle rule for single space after if Jun 24, 2016
version.sbt 0 9 0 post release (#1524) Jan 16, 2017

README.md

Cats

Build Status Workflow Chat codecov.io Latest version Scala.js

Overview

Cats is a library which provides abstractions for functional programming in Scala.

The name is a playful shortening of the word category.

cats image

Why?

Scala supports both object-oriented and functional programming, and this is reflected in the hybrid approach of the standard library. Cats augments the standard library with tools that further enable functional programming such as Validated, Monad, and Traverse. A broader goal of Cats is to provide a foundation for an ecosystem of pure, typeful libraries.

Getting Started

Cats is currently available for Scala 2.10, 2.11 and 2.12, and Scala.js.

To get started with SBT, simply add the following to your build.sbt file:

libraryDependencies += "org.typelevel" %% "cats" % "0.9.0"

This will pull in all of Cats' modules. If you only require some functionality, you can pick-and-choose from amongst these modules (used in place of "cats"):

  • cats-macros: Macros used by Cats syntax (required).
  • cats-kernel: Small set of basic type classes (required).
  • cats-core: Most core type classes and functionality (required).
  • cats-laws: Laws for testing type class instances.
  • cats-free: Free structures such as the free monad, and supporting type classes.

Release notes for Cats are available in CHANGES.md.

Cats is still under active development. While we don't anticipate any major redesigns, changes that are neither source nor binary compatible are to be expected in upcoming cats releases. We will update the minor version of cats accordingly for such changes. Once cats 1.0 is released (ETA: Q3 2016), there will be an increased focus on making changes in compatible ways.

Documentation

Cats information and documentation is available on the website.

We also have a Scaladoc index.

Finally, we have a list of frequently-asked questions.

Our goal is to have clear and comprehensive documentation. If you notice problems, omissions, or errors, please let us know.

How can I contribute to Cats?

We welcome contributions to Cats and would love for you to help build Cats. See our contributor guide for more information about how you can get involed.

Community

Discussion around Cats is currently happening in the Gitter channel as well as on Github issue and PR pages. You can get an overview of who is working on what via Waffle.io.

People are expected to follow the Typelevel Code of Conduct when discussing Cats on the Github page, Gitter channel, or other venues.

We hope that our community will be respectful, helpful, and kind. If you find yourself embroiled in a situation that becomes heated, or that fails to live up to our expectations, you should disengage and contact one of the project maintainers in private. We hope to avoid letting minor aggressions and misunderstandings escalate into larger problems.

If you are being harassed, please contact one of us immediately so that we can support you.

Maintainers

The current maintainers (people who can merge pull requests) are:

We are currently following a practice of requiring at least two sign-offs to merge PRs (and for large or contentious issues we may wait for more). For typos or other small fixes to documentation we relax this to a single sign-off.

Related Projects

There are many projects that integrate with Cats:

  • Circe: pure functional JSON library.
  • Dogs: pure functional collections and data structures.
  • Fetch: efficient data access to heterogeneous data sources.
  • Frameless: Expressive types for Spark.
  • FS2: compositional, streaming I/O library
  • Kittens: automatically derived type class instances.
  • Monix: high-performance library for composing asynchronous and event-based programs.
  • eff: functional effects and effect handlers (alternative to monad transformers).

Copyright and License

All code is available to you under the MIT license, available at http://opensource.org/licenses/mit-license.php and also in the COPYING file. The design is informed by many other projects, in particular Scalaz.

Copyright the maintainers, 2015-2016.