Skip to content

Releases: typelevel/cats

Cats 0.5.0

05 May 14:27
Compare
Choose a tag to compare

Version 0.5.0 is the fifth release.

This release includes some API changes:

cats.laws.discipline.eq no longer provides Eq instances for Tuple2 and Tuple3, these instances and together with some other new instances for Tuples are now provided by cats.std.tuple (through inheriting the instance trait defined in algebra 0.4.2).

  • #910: Remove Streaming and StreamingT
  • #967: product and map can be implemented in terms of ap
  • #970: Renamed Kleisli#applyto ap
  • #994: updated to latest algebra (brought in all the new goodies)

And additions:

  • #853: Adds a new LiftTrans typeclass
  • #864: Add Bifoldable
  • #875: Add .get method to StateT
  • #884: Add Applicative syntax
  • #886: Add map method to OneAnd
  • #927: XorT.ensure method
  • #925: Stack-safe foldM
  • #922: Add tell and writer syntax for creating Writers.
  • #903: Add Bitraverse
  • #928: Add missing Show instances
  • #940: More flexible TransLift
  • #946: Added OptionT.none
  • #947: Syntax for ApplicativeError
  • #971: Add toValidatedNel to Xor
  • #973: Add flatMapF for StateT
  • #985: Add object reducible for reducible syntax
  • #996: Add SemigroupK instance for Xor
  • #998: Add SemigroupK instance for Validated
  • #986: Add Bitraverse instances for Validated and XorT

And bug fixes:

  • #873: Fix OptionIdOps.some to always return Some
  • #958: Switch off scaladoc generation for Scala 2.10 due to macro problems
  • #955: Rename Id instances to idInstances to make selective import easier

And removals:

  • #910: Remove Streaming and StreamingT

And some other improvements to the documentation, tutorials, laws and tests, including:

  • #880: Optimize Eq[Vector[A]] instance
  • #878: Fix bug in freemonad doc
  • #870: Fixed doc string for StateT's runEmptyA()
  • #866: Add some tests for Coproduct and WriterT
  • #883: Delegate to Traverse.sequence in Applicative.sequence
  • #893: Add Reducible laws
  • #923: Make Call.loop @tailrec optimized
  • #916: add -P:scalajs:mapSourceURI option
  • #909: Make Bifunctor universal
  • #905: make Unapply serializable
  • #902: Make table in Kleisli readable
  • #897: Add Prod tests
  • #938: Onward to scala 2.11.8
  • #941: Type class composition and MonadState tests
  • #949: Add .ensime_cache to gitignore
  • #954: Switch to use nodeJsEnv as default jsEnv to build scala.js
  • #956: Upgrade scala.js from 0.6.7 -> 0.6.8
  • #960: More Reducible tests
  • #962: Improving test coverage
  • #964: Clarify stabilty guarantees; drop 'proof of concept' and 'experimental'
  • #972: Fix swapped f and g in invariant docs
  • #979: Fix outdated import for cats.syntax.apply._
  • #995: Move coverage away from bash
  • #1002: Correct the URL for Data types à la carte
  • #1005: fix broken link in foldable docs

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

Cats 0.4.1

05 Feb 02:01
Compare
Choose a tag to compare

Version 0.4.1 is a patch release in the 0.4 series and is binary compatible with
version 0.4.0.

This patch fixes bugs with the dropWhile methods on Streaming and
StreamingT.

This release corrects outdated build/POM metadata, which should fix API doc URLS.

Bug fixes:

  • #856: Fix Streaming and StreamingT dropWhile functions

Build/publishing changes:

  • #852 Update build with org change

Documentation and site improvements:

  • #859 Add Contravariant documentation page
  • #861 Docs: Revive useful links section. Update URLs

Cats 0.4.0

01 Feb 19:14
Compare
Choose a tag to compare

Version 0.4.0 is the fourth release of the Cats library, and the first release published under the org.typelevel group from the Typelevel organization on GitHub (previous releases had been published to org.spire-math from non/cats). This means that users will need to change the groupId for their Cats dependencies when updating. If you have a line like this in your SBT build configuration, for example:

libraryDependencies += "org.spire-math" %% "cats" % "0.3.0"

You will need to change it to the following:

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

This release no longer includes cats-state or cats-free artifacts, since the cats.state and cats.free packages have been moved into cats-core.

If you've checked out the GitHub repository locally, it would be a good idea to update your remote to point to the new organization, which will typically look like this (note that you should confirm that origin is the appropriate remote name):

git remote set-url origin [email protected]:typelevel/cats.git

This release includes a large number of breaking changes, including most prominently the introduction of a new Cartesian type class that is a supertype of Monad (and many other types). If you use the |@| syntax that had previously been provided by Apply, you'll need to change your imports from cats.syntax.apply._ to cats.syntax.cartesian._. For example:

scala> import cats.Eval, cats.syntax.cartesian._
import cats.Eval
import cats.syntax.cartesian._

scala> (Eval.now("v") |@| Eval.now(0.4)).tupled
res0: cats.Eval[(String, Double)] = cats.Eval$$anon$5@104f8bbd

Other changes in this release are described below.

This version includes API changes:

  • #555: |@| syntax is now provided by cats.syntax.cartesian
  • #835: State and StateT are now in the cats.data package
  • #781: combine on SemigroupK is now combineK
  • #821 and #833: The order of arguments for ap has been reversed (now function first)
  • #833: ap on CartesianBuilderN is now apWith
  • #782: State now uses Eval instead of Trampoline for stack safety
  • #697: or for natural transformations is now an instance method
  • #725: orElse on XorT and does not unnecessarily constrain the type of the left side of the result
  • #648: Some types now extend Product and Serializable to improve type inference
  • #647: ProdInstancesN names changed for consistency
  • #636: Eval is now Serializable
  • #685: Fixes for copy-paste errors in method names for instances for Validated
  • #778: Unnecessary type parameter on Foldable's sequence_ has been removed

And additions:

  • #555 and #795: Cartesian
  • #671: Coproduct and Inject
  • #812: ApplicativeError
  • #765: State and Free (and related types) are now in the core module
  • #611: Validated now has an andThen method that provides binding (but without the for-comprehension syntactic sugar that the name flatMap would bring)
  • #796: sequenceU_ and traverseU_ on Foldable
  • #780: transformS for StateT
  • #807: valueOr for XorT
  • #714: orElse for XorT
  • #705: getOrElseF for XorT
  • #731: swap for Validated
  • #571: transform and subflatMap on OptionT and XorT
  • #757 and #843: compose for Alternative and composeK for MonoidK
  • #667: OptionT.liftF

And removals:

  • #613: Free and FreeApplicative constructors are now private
  • #605: filter on Validated
  • #698: MonadCombine instances for OptionT
  • #635: Kleisli's redundant lmap, which was equivalent to local
  • #752: Cokleisli.cokleisli, which was equivalent to Cokleisli.apply
  • #687: Unused XorTMonadCombine
  • #622: Many prioritization types are now private

And new type class instances:

  • #644: Traverse and Foldable instances for XorT
  • #691: Various instances for Function1
  • #628 and #696: Various instances for WriterT
  • #673: Bifunctor instances for WriterT
  • #715 and #716: Semigroup and Monoid instances for Validated
  • #717 and #718: Semigroup instances for Xor and Const
  • #818: CoflatMap instance for Vector
  • #626: Contravariant instances for Const and Kleisli
  • #621: Id instances for Kleisli
  • #772: Reducible instances for OneAnd
  • #816: Traverse instances for OneAnd
  • #639: Traverse instance for Id
  • #774 and #775: Show instances for Vector and Stream

And bug fixes:

  • #623 fixes #563, a bug in the behavior of dropWhile_ on Foldable
  • #665 fixes #662, a bug that resulted in re-evaluation after memoization in Streaming
  • #683 fixes #677, a bug in Streaming.thunk
  • #801: Fixes order effect bug in foldMap on FreeApplicative
  • #798: Fixes bug in filter on StreamingT
  • #656: Fixes bug in drop on StreamingT
  • #769: Improved stack consumption for Eval.Call

And some dependency updates:

  • #833: Update to Simulacrum 0.7.0
  • #764: 2.10 version is now 2.10.6
  • #643: Update to Catalysts 0.2.0
  • #727: Update to Scalastyle 0.8.0

There are also many improvements to the documentation, tutorials, laws, tests, and benchmarks, including the following:

  • #724: sbt-doctest is now used to validate Scaladoc examples
  • #806: Various improvements to use of Simulacrum, which is now a compile-time-only dependency
  • #734: Documentation on testing conventions
  • #710: Documentation for Invariant
  • #832: Updated Free documentation
  • #824: New examples for Foldable
  • #797: Scaladoc examples for methods on Arrow
  • #783 and others: Scaladoc examples for syntax methods
  • #720: Expanded documentation for FreeApplicative
  • #636: Law checking for Eval
  • #649 and #660: Better Arbitrary instances for Streaming and StreamingT
  • #722: More consistent toString for StreamingT
  • #672: Additional laws for Profunctor
  • #668, #669, #679, #680, and #681: Additional law checking for Xor, XorT, and Either
  • [#707](https://github.com/typelevel/cats...
Read more

Cats 0.3.0

12 Nov 18:12
Compare
Choose a tag to compare

Version 0.3.0 is the third release of the Cats library.

This version includes new type class instances:

  • #545: Semigroup instances for OneAnd
  • #521: Monoid instances for Xor when the left side has a Semigroup instance and the right side has a Monoid
  • #497: Monoid instances for Set
  • #559: Bifunctor instances for Validated, Ior, Xor, and XorT
  • #569: Functor instances for OptionT when F has a Functor instance but not a Monad
  • #600: Show instances for Option and OptionT
  • #601: Show instances for List
  • #602: Show instances for Set
  • #568: Several new Unapply shapes

And API changes:

  • #592: fromTryCatch on Xor and Validated is now catchOnly
  • #553: MonadError now characterizes type constructors of kind * -> * instead of (*, *) -> *
  • #598: OneAnd's type constructor type parameter is now before the element type
  • #610: XorT's toOption returns an OptionT[F, B] instead of an F[Option[B]]
  • #518: Free's resume method now returns an Xor instead of an Either
  • #575 and #606: orElse on Xor and Validated does not unnecessarily constrain the type of the left side of the result
  • #577: *Aux helper classes have been renamed *PartiallyApplied

And additions:

  • #542: WriterT
  • #567: Ior.fromOptions
  • #528: OptionT.fromOption
  • #562: handleErrorWith and related helper methods on MonadError
  • #520: toNel and fromList conversions from List to NonEmptyList
  • #533: Conversions between types with Foldable instances and Streaming
  • #507: isJvm and isJs macros in the new cats.macros.Platform
  • #572: analyze on FreeApplicative for compilation into a Monoid
  • #587: Syntax for lifting values (and optional values) into Validated

And several aliases:

  • #492: FlatMapSyntax now includes followedBy, which is an alias for >>, together with a new followedByEval, which allows the caller to choose the evaluation strategy of the second action
  • #523: Foldable now has a combineAll method that aliases fold and allows postfix usage via FoldableSyntax

And a few removals:

  • #524: FreeApplicative's redundant hoist, which was equivalent to compile
  • #531: Coyoneda's by
  • #612: Many prioritization and instance traits are now private

And bug fixes:

  • #547: The empty values for Monoid[Double] and Monoid[Float] are now 0 instead of 1
  • #530: Streaming.take(n).toList no longer evaluates the n + 1-st element
  • #538: OneAnd's instances are properly prioritized

There are also many improvements to the documentation, tutorials, laws, tests, and benchmarks:

  • #522: ScalaTest's === now uses Eq instances
  • #502: Traverse's laws verify the consistency of foldMap and traverse
  • #519: Benchmarks (and performance improvements) for Eval
  • …and many others

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

See CHANGES.md for the complete change log.

Cats 0.2.0

12 Nov 18:08
Compare
Choose a tag to compare

Version 0.2.0 is the second release of the Cats library.

The most exciting feature of this release is Scala.js support, which comes courtesy of much hard work by the Scala.js community (especially Alistair Johnson). The SBT build configuration and project layout were updated to support building for both the JVM and JS platforms.

Since the 0.1.2 release there was wide agreement that the split between cats-core and cats-std was awkward. The two projects have been combined into cats-core, meaning that type class instances for common types like List are now available in cats-core.

There was also a concerted effort to improve and add documentation to the project. Many people helped find typos, broken links, and places where the docs could be improved. In particular, the following tutorials were added or overhauled:

  • Applicative
  • Const
  • Foldable
  • Free
  • FreeApplicative
  • Kleisli
  • Monad
  • Monoid
  • Semigroup
  • SemigroupK
  • Traverse
  • Validated
  • Xor

Several new type classes and data types were introduced:

  • Choice[F[_, _]]
  • Group[A]
  • MonadReader[F[_, _], R]
  • Streaming[A] and StreamingT[F[_], A]
  • Prod[F[_], G[_], A] and Func[F[_], A, B]

Syntax tests were added to ensure that existing syntax worked, and there has been some movement to enrich existing types with syntax to make converting them to Cats types easier.

The previous Fold[A] type, which was used to support lazy folds, has been replaced with Eval[A]. This type supports both strict and lazy evaluation, supports lazy map and flatMap, and is trampolined for stack safety. The definition of Foldable#foldRight has been updated to something much more idiomatic and easier to reason about. The goal is to support laziness in Cats via the Eval[A] type wherever possible.

In addition to these specific changes there were numerous small bug fixes, additions, improvements, and updates. Thanks to everyone who filed issues, participated in the Cats Gitter channel, submitted code, or helped review pull requests.

See CHANGES.md for the complete change log.

Cats 0.1.2

12 Nov 17:45
Compare
Choose a tag to compare

(Due to problems with publishing 0.1.0 and 0.1.1 are incomplete.)

Version 0.1.2 is the first non-snapshot version of the Cats library! It is intended to assist the creation of dependent libraries and to be an early look at Cats' design.

Much of the library is quite mature, but there are no source- or binary-compatibility guarantees at this time. The overarching design of the library is still somewhat in flux, although mostly we expect there will be new type classes, instances, and syntax. Some package and module boundaries may also shift.

For complete credits, see AUTHORS.md for a list of people whose work has made this release possible.

See CHANGES.md for the complete change log.