Version 0.6.0
2016 May 19
Version 0.6.0 is the sixth release.
Highlights of this release:
- #990: Separate free package into its own module
- #1001: Introduce cats-kernel and remove algebra dependency
This release also includes some API changes:
- #1046: summon
ApplicativeErrorSyntaxforF[_]instead ofF[_, _] - #1034: Don't combine lefts on
XorandXorTcombine - #1018: Remove blocking (JVM-only) Future instances
- #877: Remove required laziness in Prod, fixes #615
And additions:
- #1032: Added
Coproductfold - #1028: Added
withFilterforOptionT - #1014: Added
Monoidinstance forWriterT - #1029: Added an
ApplicativeErrorinstance forKleisliand aMonadError[Option, Unit]tostd.option - #1023: Add
XorT#fromEither - #984: Add
Validated.ensure - #1020: Add
Traverse.traverseM
And some code improvements:
- #1015: Add
Apply.map2Evaland allow traverse laziness - #1024: Override reverse on reversed
PartialOrderto return original instance - #880: Optimize
Eq[Vector[A]]instance - #1019: Use
Future#successfulinpureEvalwhen possible
And bug fixes:
- #1011: Add missing type parameters.
And some other improvements to the organization documentation, tutorials, laws and tests, including:
- #1045: Add a link to the
OptionTdocumentation from the monad docs. - #1043: Add notes about kind-projector usage in docs
- #1042: Cats 0.5.0 no longer pre-release
- #1036: Add FPiS to the "Resources for Learners" section
- #1035: Run kernel-law tests for JS as part of build
- #991: Replace
~>withNaturalTransformation - #1027: Remove unnecessary
nelSemigroupfromtraversedoc - #1022: Add law-checking for
asMeetPartialOrderandasJoinPartialOrder - #990: Separate free package into its own module
Version 0.5.0
2016 April 28
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
StreamingandStreamingT - #967:
productandmapcan be implemented in terms ofap - #970: Renamed
Kleisli#applytoap - #994: updated to latest algebra (brought in all the new goodies)
And additions:
- #853: Adds a new
LiftTranstypeclass - #864: Add
Bifoldable - #875: Add
.getmethod toStateT - #884: Add
Applicativesyntax - #886: Add
mapmethod toOneAnd - #927:
XorT.ensuremethod - #925: Stack-safe
foldM - #922: Add
tellandwritersyntax for creatingWriters. - #903: Add
Bitraverse - #928: Add missing
Showinstances - #940: More flexible
TransLift - #946: Added
OptionT.none - #947: Syntax for
ApplicativeError - #971: Add
toValidatedNeltoXor - #973: Add
flatMapFforStateT - #985: Add object
reduciblefor reducible syntax - #996: Add
SemigroupKinstance forXor - #998: Add
SemigroupKinstance forValidated - #986: Add
Bitraverseinstances forValidatedandXorT
And bug fixes:
- #873: Fix
OptionIdOps.someto always returnSome - #958: Switch off scaladoc generation for Scala 2.10 due to macro problems
- #955: Rename
Idinstances toidInstancesto make selective import easier
And removals:
- #910: Remove
StreamingandStreamingT
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'srunEmptyA() - #866: Add some tests for
CoproductandWriterT - #883: Delegate to
Traverse.sequenceinApplicative.sequence - #893: Add
Reduciblelaws - #923: Make
Call.loop@tailrecoptimized - #916: add
-P:scalajs:mapSourceURIoption - #909: Make
Bifunctoruniversal - #905: make
Unapplyserializable - #902: Make table in
Kleislireadable - #897: Add
Prodtests - #938: Onward to scala 2.11.8
- #941: Type class composition and
MonadStatetests - #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
Reducibletests - #962: Improving test coverage
- #964: Clarify stabilty guarantees; drop 'proof of concept' and 'experimental'
- #972: Fix swapped f and g in
invariantdocs - #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.
Version 0.4.1
2016 February 4
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
StreamingandStreamingTdropWhilefunctions
Build/publishing changes:
- #852 Update build with org change
Documentation and site improvements:
Version 0.4.0
2016 February 1
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 git@github.com: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 bycats.syntax.cartesian - #835:
StateandStateTare now in thecats.datapackage - #781:
combineonSemigroupKis nowcombineK - #821 and
#833: The order of arguments for
aphas been reversed (now function first) - #833:
aponCartesianBuilderNis nowapWith - #782:
Statenow usesEvalinstead ofTrampolinefor stack safety - #697:
orfor natural transformations is now an instance method - #725:
orElseonXorTand does not unnecessarily constrain the type of the left side of the result - #648: Some types now extend
ProductandSerializableto improve type inference - #647:
ProdInstancesNnames changed for consistency - #636:
Evalis nowSerializable - #685: Fixes for copy-paste
errors in method names for instances for
Validated - #778: Unnecessary type parameter
on
Foldable'ssequence_has been removed
And additions:
- #555 and
#795:
Cartesian - #671:
CoproductandInject - #812:
ApplicativeError - #765:
StateandFree(and related types) are now in the core module - #611:
Validatednow has anandThenmethod that provides binding (but without thefor-comprehension syntactic sugar that the nameflatMapwould bring) - #796:
sequenceU_andtraverseU_onFoldable - #780:
transformSforStateT - #807:
valueOrforXorT - #714:
orElseforXorT - #705:
getOrElseFforXorT - #731:
swapforValidated - #571:
transformandsubflatMaponOptionTandXorT - #757 and
#843:
composeforAlternativeandcomposeKforMonoidK - #667:
OptionT.liftF
And removals:
- #613:
FreeandFreeApplicativeconstructors are now private - #605:
filteronValidated - #698:
MonadCombineinstances forOptionT - #635:
Kleisli's redundantlmap, which was equivalent tolocal - #752:
Cokleisli.cokleisli, which was equivalent toCokleisli.apply - #687: Unused
XorTMonadCombine - #622: Many prioritization types are now private
And new type class instances:
- #644:
TraverseandFoldableinstances forXorT - #691: Various instances for
Function1 - #628 and
#696: Various instances for
WriterT - #673:
Bifunctorinstances forWriterT - #715 and
#716:
SemigroupandMonoidinstances forValidated - #717 and
#718:
Semigroupinstances forXorandConst - #818:
CoflatMapinstance forVector - #626:
Contravariantinstances forConstandKleisli - #621:
Idinstances forKleisli - #772:
Reducibleinstances forOneAnd - #816:
Traverseinstances forOneAnd - #639:
Traverseinstance forId - #774 and
#775:
Showinstances forVectorandStream
And bug fixes:
- #623 fixes
#563, a bug in the behavior of
dropWhile_onFoldable - #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
foldMaponFreeApplicative - #798: Fixes bug in
filteronStreamingT - #656: Fixes bug in
droponStreamingT - #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
Freedocumentation - #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
Arbitraryinstances forStreamingandStreamingT - #722: More consistent
toStringforStreamingT - #672: Additional laws for
Profunctor - #668,
#669,
#679,
#680, and
#681: Additional law checking
for
Xor,XorT, andEither - #707: Additional testing for
StateandStateT - #736:
map/flatMapcoherence - #748: Left and right identity
laws for
Kleisli - #753: Consistency tests for
Cokleisli - #733: Associativity laws for
KleisliandCokleislicomposition - #741: Tests for
Unapply-supported syntax - #690: Error reporting improvements for serializability tests
- #701: Better documentation for the Travis CI script
- #787: Support for cross-module Scaladoc links
Known issues:
- #702: This change identified and
fixed a stack safety bug in
foldMaponFree, but raised other issues (see #712) and was reverted in #713; #721 now tracks the non-stack safety ofFree'sfoldMap
As always thanks to everyone who filed issues, participated in the Cats Gitter channel, submitted code, or helped review pull requests.
Version 0.3.0
2015 November 8
Version 0.3.0 is the third release of the Cats library.
This version includes new type class instances:
- #545:
Semigroupinstances forOneAnd - #521:
Monoidinstances forXorwhen the left side has aSemigroupinstance and the right side has aMonoid - #497:
Monoidinstances forSet - #559:
Bifunctorinstances forValidated,Ior,Xor, andXorT - #569:
Functorinstances forOptionTwhenFhas aFunctorinstance but not aMonad - #600:
Showinstances forOptionandOptionT - #601:
Showinstances forList - #602:
Showinstances forSet - #568: Several new
Unapplyshapes
And API changes:
- #592:
fromTryCatchonXorandValidatedis nowcatchOnly - #553:
MonadErrornow characterizes type constructors of kind* -> *instead of(*, *) -> * - #598:
OneAnd's type constructor type parameter is now before the element type - #610:
XorT'stoOptionreturns anOptionT[F, B]instead of anF[Option[B]] - #518:
Free'sresumemethod now returns anXorinstead of anEither - #575 and
#606:
orElseonXorandValidateddoes not unnecessarily constrain the type of the left side of the result - #577:
*Auxhelper classes have been renamed*PartiallyApplied
And additions:
- #542:
WriterT - #567:
Ior.fromOptions - #528:
OptionT.fromOption - #562:
handleErrorWithand related helper methods onMonadError - #520:
toNelandfromListconversions fromListtoNonEmptyList - #533: Conversions between types with
Foldableinstances andStreaming - #507:
isJvmandisJsmacros in the newcats.macros.Platform - #572:
analyzeonFreeApplicativefor compilation into aMonoid - #587: Syntax for lifting values (and
optional values) into
Validated
And several aliases:
- #492:
FlatMapSyntaxnow includesfollowedBy, which is an alias for>>, together with a newfollowedByEval, which allows the caller to choose the evaluation strategy of the second action - #523:
Foldablenow has acombineAllmethod that aliasesfoldand allows postfix usage viaFoldableSyntax
And a few removals:
- #524:
FreeApplicative's redundanthoist, which was equivalent tocompile - #531:
Coyoneda'sby - #612: Many prioritization and instance traits are now private
And bug fixes:
- #547: The
emptyvalues forMonoid[Double]andMonoid[Float]are now0instead of1 - #530:
Streaming.take(n).toListno longer evaluates then + 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 usesEqinstances - #502:
Traverse's laws verify the consistency offoldMapandtraverse - #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.
Version 0.2.0
2015 August 31
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:
ApplicativeConstFoldableFreeFreeApplicativeKleisliMonadMonoidSemigroupSemigroupKTraverseValidatedXor
Several new type classes and data types were introduced:
Choice[F[_, _]]Group[A]MonadReader[F[_, _], R]Streaming[A]andStreamingT[F[_], A]Prod[F[_], G[_], A]andFunc[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.
Version 0.1.2
2015 July 17
(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.