2017 January 15
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.
Changes:
- #1424:
NonEmptyList
andNonEmptyVector
are now covariant - #1506:
flatMap
provided byEither
syntax matches 2.12'sEither#flatMap
- #1466: Improved stack safety for
StateT
- #1510:
catchNonFatal
forFuture
is now asynchronous
Bug fixes:
New type class instances:
Other additions:
- #1446:
Cofree
comonad - #1520 and #1522:
intercalate
forFoldable
(andintercalate1
forReducible
) - #1454:
asLeft
andasRight
syntax methods for creatingEither
values - #1468:
tupleLeft
andtupleRight
forFunctor
- #1500:
putLeft
,putRight
,mergeLeft
, andmergeRight
methods forIor
- #1495:
show
string interpolator - #1448:
Validated#findValid
(likeorElse
but error accumulating) - #1455:
reverse
forNonEmptyList
- #1517:
zipWithIndex
forNonEmptyList
- #1512 and #1514:
filterNot
forNonEmptyList
andNonEmptyVector
- #1480:
FunctionK#and
- #1481:
EitherT.cond
Miscellaneous improvements (syntax, documentation, tests):
- #1513: Improved documentation for
Functor
,Applicative
, andTraverse
- #1440: Improved type class documentation
- #1442: Improved documentation for
Semigroup
andMonoid
- #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
andMonoidK
instances - #1490: Avoid some duplication in build via sbt-travisci
- #1497: Site list clean-up
And version updates:
As always thanks to everyone who filed issues, participated in the Cats Gitter channel, submitted code, or helped review pull requests.
2016 November 9
Version 0.8.1 is a release to support Scala 2.12.0 with no changes to published code (only tests and documentation).
Build:
- #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+
2016 October 25
Version 0.8.0 is the eighth Cats release, and the first release with support for Scala 2.12 (specifically the 2.12.0-RC2 release candidate).
Apart from the introduction of Scala 2.12 support, the biggest change in this release is the removal
of Xor
and XorT
. See the FAQ for information about
the motivations for this change and recommendations for migration.
Removals and deprecations:
- #1310:
Xor
andXorT
are gone - #1370:
RecursiveTailRecM
andFree#foldMapUnsafe
are gone and stack safety is checked in the laws forMonad
- #1411:
FreeT#interpret
is deprecated in favor of the (equivalent)compile
Additions:
- #1382, #1415: Support for Scala 2.12.0-RC2
- #1414:
Foldable#iteratorFoldM
and lazyfoldM
implementations for many standard library instances - #1356:
append
andprepend
(and operator aliases) forNonEmptyVector
- #1327:
EitherT.fromOption
- #1388:
StateT.set
andStateT.setF
- #1392:
StateT.get
- #1325:
WriterT.lift
- #1391:
MonadReader#reader
- #1352: Macro-powered
FunctionK.lift
- #1398:
<<<
and>>>
aliases forCompose
'scompose
andandThen
- #1408:
toNestedValidated
andtoNestedValidatedNel
forEitherT
- #1399:
Order.fromComparable
- #1394:
Traverse#flatSequence
- #1417:
MonadTests#stackUnsafeMonad
laws for instances wheretailRecM
is known to be unsafe - #1411:
compile
andfoldMap
for theFree
andFreeT
companion objects
New instances:
- #1319:
Order
andGroup
forBigDecimal
- #1354:
Semigroup
forIor
- #1395:
Order
forSymbol
- #1324:
PartialOrder
and other instances forBitSet
- #1324:
Eq
andPartialOrder
forEither
- #1324:
PartialOrder
,Monoid
, and other instances forFunction0
- #1324:
Monoid
and other instances forFunction1
- #1402:
Monad
,MonadCombine
,Traverse
,Order
, etc. forProd
- #1413:
MonadError
forStateT
- #1399: Instances for
java.util.UUID
Renaming and rearrangements:
- #1385: The
cats.js.std
package is nowcats.js.instances
- #1324: Many instances moved from cats-core to cats-kernel
- #1394:
Traverse#traverseM
is nowflatTraverse
Miscellaneous improvements (syntax, documentation, tests):
- #1347: Consistency laws for
combineAll
andcombineAllOption
- #1324: Performance improvements for
Either
instances - #1386:
FunctionK
tests and examples now use kind-projector 0.9's polymorphic lambdas - #1410: Replace
Coproduct#run
withCoproduct#fold
- #1331: Less expensive
tailRecM
-flatMap
consistency checking - #1330: More consistent parameter-less method definitions and usage, other syntactic improvements
- #1340: New Scaladex badge
- #1416: New diagram of type classes
- #1352: API docs for
FunctionK
- #1369, #1418: New project site based on sbt-microsites
- #1259: 0.6-to-0.7 migration guide
- #1304, #1317, #1323, #1350, #1366, #1376, #1380, #1390, #1403, #1407, #1421: Other miscellaneous documentation improvements
Build:
- #1345: Update ScalaCheck (to 1.13.2) and Discipline (to 0.6)
- #1353: Generated sources are included in source jars
- #1322: Scala.js test clean-up
- #1426: Human-friendly names in metadata for published artifacts
- #1389: More memory for Travis CI
2016 September 1
Version 0.7.2 is a patch release that was released to fix a major bug (#1346) that appeared in 0.7.0. It also contains several other improvements.
It should be safe to upgrade from 0.7.0 to 0.7.2 -- there are no major API changes between these releases.
Fixes:
- #1347: fixes broken
Monoid[Map[K, V]].combineAll
implementation. - #1304: fix
CoflatMap
documentation. - #1322: fix SBT commands (
release
,validate
, etc.). - #1311: rename some implicit instances for consistency.
Additions:
Note that 0.7.2 was preceeded by a botched 0.7.1. release. Please avoid using this version of Cats -- it has major incompatibilities with 0.7.0 and is not documented here.
2016 August 21
Version 0.7.0 is the seventh Cats release, and includes several major rearrangements and changes to names.
If you're updating from Cats 0.6.0, it's likely that you'll need to make extensive (but mostly mechanical) changes. The following list includes some of the changes that are likely to be necessary for most projects; see the complete list of changes below for more detail.
- All references to
cats.std
will need to be changed tocats.instances
(#1140). If you're usingcats.std.all
or the othercats.std
objects with wildcard imports, this is likely to be the only change you need to make. If you are importing or referring to instance definitions by name, you'll need to be aware that the naming convention has changed (see #1066, #1068, #1110, and #1122). NonEmptyList
andNonEmptyVector
are no longer type aliases forOneAnd
, so any code usingOneAnd
to construct or pattern match on these types will need to be changed to useNonEmptyList
orNonEmptyVector
directly. There are also some API changes; for example,unwrap
calls will need to be replaced bytoList
ortoVector
, andNonEmptyList(1, 2, 3)
is nowNonEmptyList.of(1, 2, 3)
.pureEval
has been removed fromApplicative
(#1234), and has not been replaced, so if you are relying on it for laziness or effect capturing (which wasn't enforced or guaranteed), you'll need to find another approach.- All references to
NaturalTransformation
will need to be replaced by eitherFunctionK
or~>
. - The
FlatMap
type class now has atailRecM
method that is designed to support stack-safe recursive monadic binding. If your monad'sflatMap
is stack safe, you can implement a stack-safetailRecM
by callingMonad#defaultTailRecM
. The stack safety oftailRecM
is not enforced, but if your implementation is stack safe, you should also provide an instance of theRecursiveTailRecM
marker type class. - If you are interpreting a free algebra into a context
F
withfoldMap
, you'll now needF
to have an instance of theRecursiveTailRecM
marker type class (in addition to theMonad
instance).
If you run into any issues while updating, please get in touch on Gitter.
This release includes a fix for a bug in 0.6.0 (also fixed in 0.6.1):
- #1062:
Order
instances for tuples are now lexicographic (instead of only comparing first elements)
And other bug fixes:
- #1096:
inj
andprj
onInject
now work consistently with respect tonull
And some additions:
- #1289 and #1306:
EitherT
and improvedEither
syntax - #1280:
FlatMap
now has atailRecM
method - #1280:
RecursiveTailRecM
marker type class indicating thattailRecM
is stack safe - #1266:
FreeT
monad transformer - #1225:
FunctorFilter
andTraverseFilter
- #1121:
valueOr
andmerge
forValidated
- #1188:
toValidatedNel
forXorT
- #1127:
toTry
forXor
- #1269:
catchNonFatal
forApplicativeError
- #1130:
isEmpty
syntax method forMonoid
- #1167:
minimum
,maximum
, and related helper methods forFoldable
andReducible
- #1243:
distinct
onNonEmptyList
andNonEmptyVector
- #1134:
cats.syntax.list
for à la carte list syntax imports - #1191:
cats.syntax.monoid
for à la carteMonoid
syntax imports - #588 and #1063:
IdT
, the identity monad transformer - #1021 and #1221:
Nested
(represents nested composition of type constructors) - #1172:
toNested
forOptionT
andXorT
- #1102 and #1170:
Comparison
(represents the result of anOrder
comparison) - #1090:
Kleisli.lift
- #1169:
lift
,inspect
, and related methods forStateT
- #1114:
size
forFoldable
- #1193:
reduceLeftM
forReducible
- #1097: Functor variance helpers (
widen
forFunctor
andnarrow
forContravariant
) - #1207:
tell
forWriter
andWriterT
,value
forWriter
- #1155: Convenience methods for constructing
XorT
values - #1085:
runTailRec
andfoldLeftM
forFree
- #1299:
ContravariantCartesian
type class
And some name changes:
- #1140:
cats.std
is nowcats.instances
- #1066, #1068, #1110, and #1122: More unique type class instance names
- #1072:
NaturalTransformation
is nowFunctionK
- #1085:
mapSuspension
onFree
is nowcompile
- #1111:
Free.Gosub
is nowFree.FlatMapped
- #1133:
Composite*
traits for binary type classes are renamed toComposed*
for consistency (and are now private)
And other API changes:
- #1231:
NonEmptyList
is now a case class instead of a type alias for aOneAnd
- #1137:
NonEmptyVector
is now a value class instead of a type alias for aOneAnd
- #1267: Overloaded variadic
apply
onNonEmptyList
andNonEmptyVector
is nowof
- #1234:
Applicative#pureEval
has been removed - #1202:
MonadFilter
no longer has afilterM
method (see #1225) - #1075:
foldMap
onFree
now requires aMonadRec
instance (instead of simplyMonad
) - #1085:
Free.suspend
no longer requires anApplicative
instance - #1084: Safer
toString
forFree
andFreeApplicative
- #1100: Simplified constraints for methods on
Xor
and related types - #1171: Prioritization traits are now private
And many new instances:
- #1059 and #1147:
Monoid
,MonadError
, and other instances forscala.util.Try
- #1299:
Monad
forTuple2
- #1211:
Contravariant
forEq
- #1220:
Traverse
andComonad
forTuple2
- #1103:
Order
,MonadError
, and other instances forOptionT
- #1106:
Semigroup
andMonoid
forXorT
- #1138:
SemigroupK
andMonadCombine
forStateT
- #1128
Semigroup
andMonoid
forApplicative
- #1049:
CoflatMap
forWriterT
- #1076 and #1261:
MonadRec
instances forEval
,StateT
, andFuture
- #1105:
Unapply
instances forNested
shapes
And miscellaneous improvements to style and performance:
And improvements to the documentation:
- #1145: Major rearrangements and additions
- #1136: New chart for symbols
- #1052: New "Why?" section
- #1095, #1226, and #1227: New FAQ section
- #1163: New import guide section
- #1217, #1223, and #1239: New related projects
- #1057 and #1157: Copy-paste-friendly code blocks
- #1104 and #1115: Kitchen-sink imports in example code
- #1050: Switch to rouge for syntax highlighting in the GitHub Pages site
- #1119: Fix for
contramap
signature - #1141 and #1162: Fixes for cats-kernel documentation
- #1149: Spelling consistency for "type class"
- #1183: More documentation about use of Machinist, Simulacrum, and kind-projector
- #1056: Clarification about forgetful functors and the free monad
- #1131 and #1241: Simplified project structure listings
- #1185, #1186, and #1189: Miscellaneous improvements for
Traverse
documentation
And the build:
- #1159: Binary compatibility checking for cats-kernel via MiMa
- #1256: More reliable Scala.js testing in Travis CI
- #1123: cats-kernel is now included in the API documentation
- #1051: Empty Scaladocs for 2.10 to avoid issues macros cause for API documentation generation on 2.10
- #1154: Better POM hygiene: no Scoverage dependency
- #1153 and #1218: More consistent use of Simulacrum for syntax
- #1093: Scalastyle is now aware of shared and Scala.js-specific source files
- #1142: Additional formatting rules for Scalastyle
- #1099: Type lambda style is now enforced by Scalastyle
- #1258: Version updates for SBT and SBT plugins
We also welcome Kailuo Wang, Peter Neyens, and Oscar Boykin as new Cats maintainers!
2016 July 14
Version 0.6.1 is a patch release compatible with 0.6.0.
It contains one bug fix:
- #1062: Fixed a bug in the Order and PartialOrder instances for Tuple2+ where only the first element was used in comparisons
It also contains a change to the build:
- #1173: Add binary compatibility check to all published modules
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
ApplicativeErrorSyntax
forF[_]
instead ofF[_, _]
- #1034: Don't combine lefts on
Xor
andXorT
combine
- #1018: Remove blocking (JVM-only) Future instances
- #877: Remove required laziness in Prod, fixes #615
And additions:
- #1032: Added
Coproduct
fold
- #1028: Added
withFilter
forOptionT
- #1014: Added
Monoid
instance forWriterT
- #1029: Added an
ApplicativeError
instance forKleisli
and aMonadError[Option, Unit]
tostd.option
- #1023: Add
XorT#fromEither
- #984: Add
Validated.ensure
- #1020: Add
Traverse.traverseM
And some code improvements:
- #1015: Add
Apply.map2Eval
and allow traverse laziness - #1024: Override reverse on reversed
PartialOrder
to return original instance - #880: Optimize
Eq[Vector[A]]
instance - #1019: Use
Future#successful
inpureEval
when 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
OptionT
documentation 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
nelSemigroup
fromtraverse
doc - #1022: Add law-checking for
asMeetPartialOrder
andasJoinPartialOrder
- #990: Separate free package into its own module
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 Tuple
s are now provided by cats.std.tuple
(through inheriting the instance trait defined in algebra 0.4.2).
- #910: Remove
Streaming
andStreamingT
- #967:
product
andmap
can be implemented in terms ofap
- #970: Renamed
Kleisli#apply
toap
- #994: updated to latest algebra (brought in all the new goodies)
And additions:
- #853: Adds a new
LiftTrans
type class - #864: Add
Bifoldable
- #875: Add
.get
method toStateT
- #884: Add
Applicative
syntax - #886: Add
map
method toOneAnd
- #927:
XorT.ensure
method - #925: Stack-safe
foldM
- #922: Add
tell
andwriter
syntax for creatingWriters
. - #903: Add
Bitraverse
- #928: Add missing
Show
instances - #940: More flexible
TransLift
- #946: Added
OptionT.none
- #947: Syntax for
ApplicativeError
- #971: Add
toValidatedNel
toXor
- #973: Add
flatMapF
forStateT
- #985: Add object
reducible
for reducible syntax - #996: Add
SemigroupK
instance forXor
- #998: Add
SemigroupK
instance forValidated
- #986: Add
Bitraverse
instances forValidated
andXorT
And bug fixes:
- #873: Fix
OptionIdOps.some
to always returnSome
- #958: Switch off scaladoc generation for Scala 2.10 due to macro problems
- #955: Rename
Id
instances toidInstances
to make selective import easier
And removals:
- #910: Remove
Streaming
andStreamingT
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
Coproduct
andWriterT
- #883: Delegate to
Traverse.sequence
inApplicative.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.
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
Streaming
andStreamingT
dropWhile
functions
Build/publishing changes:
- #852 Update build with org change
Documentation and site improvements:
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:
State
andStateT
are now in thecats.data
package - #781:
combine
onSemigroupK
is nowcombineK
- #821 and
#833: The order of arguments for
ap
has been reversed (now function first) - #833:
ap
onCartesianBuilderN
is nowapWith
- #782:
State
now usesEval
instead ofTrampoline
for stack safety - #697:
or
for natural transformations is now an instance method - #725:
orElse
onXorT
and does not unnecessarily constrain the type of the left side of the result - #648: Some types now extend
Product
andSerializable
to improve type inference - #647:
ProdInstancesN
names changed for consistency - #636:
Eval
is 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:
Coproduct
andInject
- #812:
ApplicativeError
- #765:
State
andFree
(and related types) are now in the core module - #611:
Validated
now has anandThen
method that provides binding (but without thefor
-comprehension syntactic sugar that the nameflatMap
would bring) - #796:
sequenceU_
andtraverseU_
onFoldable
- #780:
transformS
forStateT
- #807:
valueOr
forXorT
- #714:
orElse
forXorT
- #705:
getOrElseF
forXorT
- #731:
swap
forValidated
- #571:
transform
andsubflatMap
onOptionT
andXorT
- #757 and
#843:
compose
forAlternative
andcomposeK
forMonoidK
- #667:
OptionT.liftF
And removals:
- #613:
Free
andFreeApplicative
constructors are now private - #605:
filter
onValidated
- #698:
MonadCombine
instances 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:
Traverse
andFoldable
instances forXorT
- #691: Various instances for
Function1
- #628 and
#696: Various instances for
WriterT
- #673:
Bifunctor
instances forWriterT
- #715 and
#716:
Semigroup
andMonoid
instances forValidated
- #717 and
#718:
Semigroup
instances forXor
andConst
- #818:
CoflatMap
instance forVector
- #626:
Contravariant
instances forConst
andKleisli
- #621:
Id
instances forKleisli
- #772:
Reducible
instances forOneAnd
- #816:
Traverse
instances forOneAnd
- #639:
Traverse
instance forId
- #774 and
#775:
Show
instances forVector
andStream
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
foldMap
onFreeApplicative
- #798: Fixes bug in
filter
onStreamingT
- #656: Fixes bug in
drop
onStreamingT
- #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 forStreaming
andStreamingT
- #722: More consistent
toString
forStreamingT
- #672: Additional laws for
Profunctor
- #668,
#669,
#679,
#680, and
#681: Additional law checking
for
Xor
,XorT
, andEither
- #707: Additional testing for
State
andStateT
- #736:
map
/flatMap
coherence - #748: Left and right identity
laws for
Kleisli
- #753: Consistency tests for
Cokleisli
- #733: Associativity laws for
Kleisli
andCokleisli
composition - #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
foldMap
onFree
, 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.
2015 November 8
Version 0.3.0 is the third release of the Cats library.
This version includes new type class instances:
- #545:
Semigroup
instances forOneAnd
- #521:
Monoid
instances forXor
when the left side has aSemigroup
instance and the right side has aMonoid
- #497:
Monoid
instances forSet
- #559:
Bifunctor
instances forValidated
,Ior
,Xor
, andXorT
- #569:
Functor
instances forOptionT
whenF
has aFunctor
instance but not aMonad
- #600:
Show
instances forOption
andOptionT
- #601:
Show
instances forList
- #602:
Show
instances forSet
- #568: Several new
Unapply
shapes
And API changes:
- #592:
fromTryCatch
onXor
andValidated
is nowcatchOnly
- #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
'stoOption
returns anOptionT[F, B]
instead of anF[Option[B]]
- #518:
Free
'sresume
method now returns anXor
instead of anEither
- #575 and
#606:
orElse
onXor
andValidated
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 onMonadError
- #520:
toNel
andfromList
conversions fromList
toNonEmptyList
- #533: Conversions between types with
Foldable
instances andStreaming
- #507:
isJvm
andisJs
macros in the newcats.macros.Platform
- #572:
analyze
onFreeApplicative
for compilation into aMonoid
- #587: Syntax for lifting values (and
optional values) into
Validated
And several aliases:
- #492:
FlatMapSyntax
now includesfollowedBy
, which is an alias for>>
, together with a newfollowedByEval
, which allows the caller to choose the evaluation strategy of the second action - #523:
Foldable
now has acombineAll
method that aliasesfold
and 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
empty
values forMonoid[Double]
andMonoid[Float]
are now0
instead of1
- #530:
Streaming.take(n).toList
no 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 usesEq
instances - #502:
Traverse
's laws verify the consistency offoldMap
andtraverse
- #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.
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:
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]
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.
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.