@kailuowang kailuowang released this Jul 23, 2018 · 96 commits to master since this release

Assets 2

Version 1.2.0

Cats 1.2.0 is binary compatible with all previous 1.x Cats releases, i.e. its jar is a drop-in replacement for 1.0.1 and 1.1.0 jars.

Cats 1.2.0 is also the last non-patch release that supports Scala 2.10. Farewell Scala 2.10.

1.2.0 brought you:

24 API Enhancements

22 Documentation Additions/Fixes

12 Build and Tests Improvements:

@kailuowang kailuowang released this Mar 16, 2018 · 177 commits to master since this release

Assets 2

Version 1.1.0

Cats 1.1.0 is binary compatible with 1.0.1, i.e. its jar is a drop-in replacement for the 1.0.1 jar.

1.1.0 brought you:

15 API Enhancements

4 Bug Fixes

16 Documentation Additions/Fixes

4 Build Improvements:

@LukaJCB LukaJCB released this Dec 31, 2017 · 234 commits to master since this release

Assets 2

Version 1.0.1

2017 Dec 31

There is zero code change since 1.0.0. This is a release to fix the 1.0.0-MF issue that on Maven 1.0.0-MF is deemed later than 1.0.0.
For details see #2131

@kailuowang kailuowang released this Dec 26, 2017 · 234 commits to master since this release

Assets 2

Version 1.0.0

2017 Dec 25

Documentation Improvements/Additions:

@LukaJCB LukaJCB released this Dec 19, 2017 · 234 commits to master since this release

Assets 2

Version 1.0.0-RC2

2017 Nov 25

Breaking changes and migration

  • #2039 Remove Applicative#traverse and Applicative#sequence by @kubukoz
  • #2033 standardise on liftF and add liftK to transformers by @SystemFw
  • #2083 Change forEffect/followedBy to productL/productR by @Jacoby6000
  • #2088 Add InvariantSemigroupal and ability to turn Monoidals to Monoids by @LukaJCB

New features / enhancements (API, instances, data types, etc.):

Bug fixes:

Documentation Improvements/Additions:

Build improvements/dependency updates

Testing improvements

@kailuowang kailuowang released this Oct 31, 2017 · 326 commits to master since this release

Assets 2

Version 1.0.0-RC1

2017 Oct 21

This is the only planned release candidate release prior to 1.0.0, which if everything goes according to plan, shall come in 2-3 weeks.

Breaking changes and migration

To migrate from 1.0.0-MF.

  • The rename of Cartesian to Semigroupal and EitherT.liftT to EitherT.liftF can be done automatically through scalafix we provide. See instructions here.
  • For FlatMap's >> and <<, use Apply's *> and <* instead.
  • Profunctor and Strong were moved to the cats.arrow package, Bifunctor, Invariant and Contravariant were moved to the cats root package.
  • SemigroupK[λ[α => Kleisli[F, α, α]]] and MonoidK[λ[α => Kleisli[F, α, α]]] are no longer implicitly available, Use Kleisli.endoSemigroupK and Kleisli.endoMonoidK to get them explicitly.
  • law testing for type classes in cats.kernel was made consistent with the law testing in cats.core. Check here for a guide on how to test cats type class instances.
  • NonEmptyList.concat that takes NonEmptlyList was deprecated, use NonEmptyList.concatNel instead.
  • Monoid no longer has a InvariantMonoidal instance, we discovered that it's not lawful. It has have an Invariant and a Semigroupal (new name for Cartesian) instance.
  • Foldable.iterateRight now takes an Iterable instead of Iterator, see #1973 for rationale.
  • Foldable for Set and Traversable for Map were moved to Alleycats, see #1831 for rationale.
  • cats.data.Kleisli#transform and cats.free.Coyoneda#transform were deprecated and replaced by mapK

New features / enhancements (API, instances, data types, etc.):

Bug fixes:

Documentation Improvements/Additions:

Build improvements/dependency updates

Testing improvements

Scalafix for migration

  • #1813 Add RenameInjectProdAndCoproduct, RenameTupleApplySyntax and RemoveSplit Scalafix rewrites by @gabro
  • #1937 Add scalafix for contramap by @LukaJCB

@kailuowang kailuowang released this Aug 3, 2017 · 549 commits to master since this release

Assets 2

Version 1.0.0-MF

2017 Aug 3

MF stands for milestone final. This is the last non-RC release before 1.0.0.
The main purpose/focus of this release is to offer a relatively stable API to
work with prior to 1.0.0. It can be deemed as a proposal for the final API
we are going to maintain binary compatibiliy after 1.0.
We will give community some time to validate it before we release 1.0.0-RC1.

To migrate from 0.9.0

We apologize for the number of breaking changes in this release. We are trying to include
as many breaking changes as possible in this release before we lock down the API.

  • cats no longer publishes the all-inclusive bundle package "org.typelevel" % "cats", use cats-core, cats-free, or cats-law
    accordingly instead. If you need cats.free, use "org.typelevel" % "cats-free", if you need cats-laws use
    "org.typelevel" % "cats-laws", if neither, use "org.typelevel" % "cats-core".
  • cats.free.Inject is moved from cats-free to cats-core and renamed to cats.InjectK;
    cats.data.Prod is renamed to cats.data.Tuple2K; cats.data.Coproduct is renamed to
  • All Unapply enabled methods, e.g. sequenceU, traverseU, etc. are removed. Unapply
    enabled syntax ops are also removed. Please use the partial unification SI-2712 fix
    instead. The easiest way might be this sbt-plugin.
  • FunctorFilter, MonadCombine, MonadFilter, MonadReader, MonadState, MonadTrans, MonadWriter and TraverseFilter are no longer in cats, the functionalities they provided are inhereted by the new cats-mtl project. Please check here for migration guide.
  • CartesianBuilder (i.e. |@|) syntax is deprecated, use the apply syntax on tuples instead. E.g. (x |@| y |@| z).map(...) should be replaced by (x, y, z).mapN(...). If you are getting "mapN not found" error message, it could be due to SI-2712, see the 3rd migration item above.
  • Apply syntax on tuple (e.g. (x, y, z).map3(...)) was moved from cats.syntax.tuple._ to cats.syntax.apply._ and renamed to mapN, contramapN and imapN respectively.
  • The creation methods (left, right, apply, pure, etc.) in EitherT were improved to take less
    type arguments.
  • Several cats-core type class instances for cats.kernel were moved from their companion objects to separate traits
    and thus require imports from cats.instances.xxx._ (or the recommended import cats.implicits._) now. See #1659 for more details.
  • Free.suspend is renamed to Free.defer for consistency.
  • traverse1_, intercalate1 and sequence1_ in Reducible were renamed to nonEmptyTraverse_, nonEmptyIntercalate and nonEmptySequence_ respectively.
  • foldLeftM is removed from Free, use foldM on Foldable instead, see #1117 for detail.
  • iteratorFoldM was removed from Foldable due to #1716
  • Split is removed, and the method split is moved to Arrow. Note that only under CommutativeArrow does it guarantee the non-interference between the effects. see #1567

If you feel adventurous you can try the experimental Scalafix rewrites.
See all the available rewrites and the instructions here.

Breaking Changes:

New Features (API, instances, data types, etc):

Code improvements:

Bug fixes:

Other miscellaneous improvements (documentation, tests, build):

May 17, 2017


Merge pull request #1636 from kailuowang/improve-functionK-doc
added some category theory into FunctionK document

@travisbrown travisbrown released this Jan 16, 2017 · 751 commits to master since this release

Assets 2

The biggest user-facing change in this release is to the behavior of the flatMap (and related methods) provided by EitherOps for the standard library's Either for Scala 2.10 and 2.11. These methods now match the behavior of the flatMap on Either in Scala 2.12 in that they don't require the left-hand side types to match.

For example, the following would previously compile on 2.12, but not 2.10 or 2.11:

import cats.syntax.either._

sealed abstract class AppError
case object Error1 extends AppError
case object Error2 extends AppError

val either1: Either[Error1.type, String] = Right("hi")
val either2: Either[Error2.type, String] = Right("bye")

val result: Either[AppError, String] = for {
  v1 <- either1
  v2 <- either2
} yield v1 + v2

This code now works equivalently on all supported Scala versions.


  • #1424: NonEmptyList and NonEmptyVector are now covariant
  • #1506: flatMap provided by Either syntax matches 2.12's Either#flatMap
  • #1466: Improved stack safety for StateT
  • #1510: catchNonFatal for Future is now asynchronous

Bug fixes:

  • #1465 and #1507: Stack safety law for Monad#tailRecM is less eager and doesn't throw exceptions

New type class instances:

  • #1475: Reducible instances for Eval and Id
  • #1484: Show instance for Symbol

Other additions:

  • #1446: Cofree comonad
  • #1520 and #1522: intercalate for Foldable (and intercalate1 for Reducible)
  • #1454: asLeft and asRight syntax methods for creating Either values
  • #1468: tupleLeft and tupleRight for Functor
  • #1500: putLeft, putRight, mergeLeft, and mergeRight methods for Ior
  • #1495: show string interpolator
  • #1448: Validated#findValid (like orElse but error accumulating)
  • #1455: reverse for NonEmptyList
  • #1517: zipWithIndex for NonEmptyList
  • #1512 and #1514: filterNot for NonEmptyList and NonEmptyVector
  • #1480: FunctionK#and
  • #1481: EitherT.cond

Miscellaneous improvements (syntax, documentation, tests):

  • #1513: Improved documentation for Functor, Applicative, and Traverse
  • #1440: Improved type class documentation
  • #1442: Improved documentation for Semigroup and Monoid
  • #1479: Some instance traits are now package-private
  • #1445: Workaround for Tut issue
  • #1477: Use new kind-projector syntax for polymorphic lambdas
  • #1483: Binary compatibility checking is now part of the build for cats-kernel
  • #1469: More consistent instance names
  • #1496: Simpler creation of some SemigroupK and MonoidK instances
  • #1490: Avoid some duplication in build via sbt-travisci
  • #1497: Site list clean-up

And version updates:

  • #1499: 2.12 version is now 2.12.1
  • #1509: Scala.js version is 0.6.14

As always thanks to everyone who filed issues, participated in the Cats Gitter channel, submitted code, or helped review pull requests.

@travisbrown travisbrown released this Nov 9, 2016 · 850 commits to master since this release

Assets 2

Version 0.8.1 is a release to support Scala 2.12.0 with no changes to published code (only tests and documentation).


  • #1457: Update to Scala 2.12.0

Miscellaneous improvements (syntax, documentation, tests):

  • #1444: Remove defaultTailRecM from monad doc
  • #1441: Fixes #1438 by replacing quoted entry name
  • #1432: Type class organization in documentation
  • #1439: Update version on index
  • #1451: Fix Arbitrary instances for ScalaCheck 1.13.3+