Are you happy with your logging solution? Would you help us out by taking a 30-second survey? Click here


Category Theory and Algebraic abstractions for Clojure and ClojureScript.

Subscribe to updates I use cats

Statistics on cats

Number of watchers on Github 632
Number of open issues 27
Average time to close an issue about 2 months
Main language Clojure
Average time to merge a PR 3 days
Open pull requests 6+
Closed pull requests 4+
Last commit almost 2 years ago
Repo Created over 5 years ago
Repo Last Updated almost 2 years ago
Size 1.54 MB
Organization / Authorfuncool
Latest Release2.0.0
Page Updated
Do you use cats? Leave a review!
View open issues (27)
View cats activity
View on github
Fresh, new opensource launches 🚀🚀🚀
Trendy new open source projects in your inbox! View examples

Subscribe to our mailing list

Evaluating cats for your project? Score Explanation
Commits Score (?)
Issues & PR Score (?)


Travis Badge Join the chat at

And there are my cats, engaged in a ritual that goes back thousands of years, tranquilly licking themselves after the meal. Practical animals, they prefer to have others provide the food ... some of them do. There must have been a split between the cats who accepted domestication and those who did not.

-- William S. Burroughs, The Cat Inside

Clojars Project

Category Theory and algebraic abstractions for Clojure and ClojureScript.


  • Documentation:
  • API reference:


To run Clojure tests:

lein test

To run ClojureScript tests:

node out/tests.js
cats open issues Ask a question     (View All Issues)
  • over 3 years <*> throws an exception if the first argument is not a higher-order function
  • over 3 years <*> does not invoke a function when the third argument is supplied
  • over 3 years >=> returns a function
  • over 3 years Integration with specs
  • over 3 years differing types for either/maybe
  • over 3 years core/alet works in unexpected way
  • almost 4 years why is either not a semigroup
  • almost 4 years Remove reflection warnings from cats.labs.* namespaces
  • almost 4 years Investigate occasional Travis failures
  • almost 4 years docs for `alet` do not mention ctx/with-context, pm/promise-context
  • about 4 years alet dependency inference
  • about 4 years Workflow discussion
  • about 4 years Ring & Semiring
  • about 4 years Helpers for ensuring that values are wrapped in a certain type
  • over 4 years Const applicative
  • over 4 years Free Monad
  • over 4 years Comonad
  • over 4 years Manifold Stream support.
  • over 4 years Applicative instances for monad transformers
  • over 4 years composing applicatives
  • over 4 years Different alet evaluation strategy
  • over 4 years Context management discussion
  • over 4 years More thorough extension of built-in types
cats open pull requests (View All Pulls)
  • WIP: Applicative and functor instances for monad transformers
  • Fix typo
  • Define cats.monad.maybe/maybe as a macro
  • Fix Issue #192 of dynamic context overriding default context
  • Change either monad implementation to record
  • Re-add state monad
cats questions on Stackoverflow (View All Questions)
  • An exercise - cats in a hall
  • False errors when using cats library in IntelliJ
  • Is there a smarter way to do this with cats?
  • Does cats have an equivalent of traverseM from scalaz?
  • Invalid option name in CATS SAS function?
  • SAS CATS() function is stripping leading zeroes of numeric variables?
  • what is @noop in simulacrum in Cats
  • In Cats, does @op argument list have a maximum of 2 parameters?
  • how to find all possible solutions to a formula, like 100*7-8*3+7? (8 Out of 10 Cats Does Countdown solver)
  • WP : Custom Post Type pagination by cats Issue
  • related posts in wordpress by tags or cats
  • How does the Cats library in Scala relate to scalaz?
  • How to use a mixture of cats and pipes in subprocess
  • Spring form:select cats as toString
  • Can you cats using generic method GetType(), and if not, how to handle that?
  • yii framework. cats tree functions aren`t working in the model file
  • cats() got an unexpected keyword argument 'pk'
  • php -f file.php cats file to command line?
  • Regular expression for finding tag numbers in a list of cats
  • How does the single responsibility principle relate to cats and dogs?
  • How to find all cats with a Regular Expressions
  • Current MySQL IN statement strings Cats as an "OR" - Need it as an "And" statement
  • Counting cats with regular expressions
  • Generating a product count per category in magento (inc sub cats)
  • Throwing cats out of windows
  • Getting Cat ID when product is in multiple Cats magento
  • Sync Custom Post Types (and Custom Fields, Cats, etc.) Between WordPress Sites
  • SQLExpress error: Invalid object name 'Cats'
  • How to get sum of entries having cats, subcats and 2 tables
  • Wordpress category loop, how to hide cats with no posts?
cats list of languages used
cats latest release notes

This version intend to clean the library from unused and out of context stuff and leave only the useful abstractions. This is a list of main changes (mostly breaking):

  • Removed support for monad transformers. They add too many complex to the implementation but in return adds very low value in context of dynamic languages as is clojure.
  • Removed state, writer, reader and continuation monad namespaces. They are not very useful in clojure so having them without any particular usefulness it not make sense.
  • Removed cats.applicative namespace because it is too many opinionated and not really useful in the real world. The use case vary depending on when that abstraction is used so we encourage users to define their own abstraction with specific behavior for their application.
  • Removed CRDT's labs. It was an experiment and the final sensacion is that is not very useful and in most circumstances the users defines their own datastructures instead of rely on ones from third party packages. So, maintaining them in the code base also does not make sense
  • Removed lens and traversals namespaces. The first one becomes very useful and is properly externalized as separated package. The last one, seems like it is not very useful and seems out of context of cats library. If anyone is interested in maintaining it, the code can be extracted from the previos git revisions and released as separated library.
  • Move cats.labs.sugar into cats.core namespace (cats.labs.sugar ns is removed)

And a list of other changes and contributions:

  • PersistentListq support in sequence context (@muhuk)
  • Rewrite integration with core.async combinators (@yanatan16)
  • Add cats.builtin.lazy-sequence-context (@muhuk)
  • Fix bug in sequence context's fapply implementation (@muhuk)
  • Performance improvements in sequence context implementation (@muhuk)
  • Add cats.monad.either/try-either macro for capturing exceptions as left, values as right (@shmish111)
  • Move promesa.monad namespace under cats.labs.promise ns.
Other projects in Clojure