Releases: typelevel/cats
Cats 1.0.0
1.0.0-RC2
Version 1.0.0-RC2
2017 Nov 25
Breaking changes and migration
- #2039 Remove
Applicative#traverseandApplicative#sequenceby @kubukoz - #2033 standardise on
liftFand addliftKto transformers by @SystemFw - #2083 Change forEffect/followedBy to productL/productR by @Jacoby6000
- #2088 Add
InvariantSemigroupalandabilityto turnMonoidals toMonoids by @LukaJCB
New features / enhancements (API, instances, data types, etc.):
- #1949 Add ::: to NonEmptyList by @jcranky
- #2020 Add
foldlandfoldraliases toFoldableby @felixmulder - #2024 Optimize foldMap implementations with combineAll by @carymrobbins
- #1938 Add more Parallel instances by @LukaJCB
- #2030 added
collectFirstandcollectFirstSometoFoldableby @kailuowang - #1977 Add Ior Monad Transformer by @frroliveira
- #2038 Add &> and <& as syntax for Parallel by @LukaJCB
- #1981 Add UnorderedFoldable and UnorderedTraverse by @LukaJCB
- #2047 CommutativeMonoid instance for SortedMap by @alonsodomin
- #2043 Removed deprecation of >> and changed its param to be a by-name by @mpilquist
- #2034 Add ContravariantMonoidal by @stephen-lazaro
- #2057 Add
Ior.fromEitherby @markus1189 - #2056 Functor.fmap by @fosskers
- #2059 Add Parallel instance for Ior by @andyscott
- #2061 Add
MonadError.rethrowby @SystemFw - #2072 added a default id for Arrow by @kailuowang
- #2063 Added
merge(product) toArrowfor arrows composition by @marcobattaglia - #2060 Add parallel instance for IorT by @andyscott
- #2046 Add distributive typeclass and some instances by @coltfred
- #2099 CommutativeMonad and CommutativeFlatMap instances for Tuple2 by @ceedubs
- #2096 Add Arrow Choice by @stephen-lazaro
- #2098 Add a CommutativeMonoid for Map by @ceedubs
- #2101 Add Semigroup.instance method by @jozic
- #2103 CommutativeMonad for Eval by @ceedubs
- #2104 Add Commutative{Monad, FlatMap} instances for IdT by @ceedubs
- #2105 Some Kleisli instance cleanup by @ceedubs
- #2110 add
Comparisontocatspackage by @kailuowang - #2112 CoflatMap Instance for Applicative by @ChristopherDavenport
- #2116 conversion
PartialOrdertoPartialOrderingandHashtoHashingby @kailuowang - #2100 Add
comparisonmethod inOrdercompanion object by @ceedubs
Bug fixes:
- #2011 Rename ContravariantCartesian.scala to ContravariantSemigroupal.scala by @iravid
- #2016 Removed redundant Eq instance by @denisrosset
- #2029 make sure that EitherT MonadError syntax works the old way by @kailuowang
Documentation Improvements/Additions:
- #2007 move alleycats in readme by @kailuowang
- #2008 Upgrade Scalafix instructions by @gabro
- #2009 Correct it's -> its documentation errors by @kellen
- #2017 Fix alleycats module name by @benhutchison
- #2023 Fixes in Arrow docs by @Jasper-M
- #2026 Correctly close a tut:silent block in faq by @vendethiel
- #2027 Rename Validation to Validated in Validated docs by @Ttcao
- #2036 Clean up applicative syntax doc by @bkirwi
- #2035 Do not redirect to cats-mtl for MonadCombine by @vendethiel
- #2048 Add direct link to the scaladoc by @fagossa
- #2050 Link Directly to Cats Package in ScalaDoc by @stephen-lazaro
- #2031 Add parallel docs by @LukaJCB
- #2045 Fix scalafix testing instructions by @kubukoz
- #2068 Update symbols table by @stephen-lazaro
- #2070 Add some doctest examples for Alternative methods by @ceedubs
- #2065 added entry for sbt-catalysts by @kailuowang
- #2071 Add doc example for imap by @ceedubs
- #2073 Add doctests for
Ior.fromOptionsby @markus1189 - #2077 Add some doctest examples for SemigroupK/MonoidK by @ceedubs
- #2079 Add doctest examples for Applicative by @ceedubs
- #2095 Update guidelines.md by @kailuowang
- #2108 Update version of deprecation to 1.0.0-RC2 by @rossabaker
Build improvements/dependency updates
- #2028 Lawtesting: Update scalacheck-shapeless and cats by @vendethiel
- #2065 improve build by not displaying each success test by @kailuowang
- #2106 Update to latest patch versions of scala by @ceedubs
- #2114 sbt-coursier 1.0.0 by @sullis
Testing improvements
- #2037 Tests: MonadCombine->Alternative, add missing ones by @vendethiel
- #2052 Add labels to prop produced from IsEq by @nigredo-tori
- #2053 Fix #2051, Remove superfluous implicit by @rsoeldner
- #2081 Reduce redundancy in Semigroup and Eq test names by @ceedubs
- #2097 added distributeIdentityLaw by @kailuowang
1.0.0-RC1
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
- #1964 Require an
Orderinstance forNonEmptyList's groupBy function by @igstan - #1961 rename
CartesiantoSemigroupalby @kailuowang - #1955 Deprecate
FlatMap's>>and<<by @LukaJCB - #1947 Rename
EitherT.liftTtoEitherT.liftFby @aeons - #1934 Restruct
functorby @kailuowang - #1803 Convert
ReaderWriterStateTtoIndexedReaderWriterStateTby @iravid - #1775 Convert
StateTtoIndexedStateTby @iravid - #1098 Add a different
MonoidKandSemigroupKinstance forKleisliby @peterneyens - #1922 Make kernel laws consistent with core laws by @LukaJCB
- #1838 Sync
NonEmptyListandNonEmptyVectormethods by @durban - #1914 Add
Invariantinstances for kernel type classes by @LukaJCB - #1980 Make
iterateRightinFoldablesound by @LukaJCB - #1972 Add
SortedMapandSortedSetinstances/MoveSetandMapinstances to Alleycats by @LukaJCB/@kailuowang - #1997 Minimizing typeclass surface in cats-kernel by @denisrosset
- #1987 Add
mapKtotransformersby @andyscott / @LukaJCB
To migrate from 1.0.0-MF.
- The rename of
CartesiantoSemigroupalandEitherT.liftTtoEitherT.liftFcan be done automatically through scalafix we provide. See instructions here. - For
FlatMap's>>and<<, useApply's*>and<*instead. ProfunctorandStrongwere moved to thecats.arrowpackage,Bifunctor,InvariantandContravariantwere moved to thecatsroot package.SemigroupK[λ[α => Kleisli[F, α, α]]]andMonoidK[λ[α => Kleisli[F, α, α]]]are no longer implicitly available, UseKleisli.endoSemigroupKandKleisli.endoMonoidKto get them explicitly.- law testing for type classes in
cats.kernelwas made consistent with the law testing incats.core. Check here for a guide on how to test cats type class instances. NonEmptyList.concatthat takesNonEmptlyListwas deprecated, useNonEmptyList.concatNelinstead.Monoidno longer has aInvariantMonoidalinstance, we discovered that it's not lawful. It has have anInvariantand aSemigroupal(new name forCartesian) instance.Foldable.iterateRightnow takes anIterableinstead ofIterator, see #1973 for rationale.FoldableforSetandTraversableforMapwere moved to Alleycats, see #1831 for rationale.cats.data.Kleisli#transformandcats.free.Coyoneda#transformwere deprecated and replaced bymapK
New features / enhancements (API, instances, data types, etc.):
- #1958 Add
FlatMap#flatTap, a more principled version of the kestrel combinator. by @hrhino - #1950 more instances for
Hash(#1712):Queue/Durationby @ctongfei - #1942 add
traverseNto cartesian syntax by @julien-truffaut - #1939 Add
guardtoAlternativeby @SystemFw - #1933 Add syntax for
ApplicativeError.fromEither by @tpolecat - #1921 Optimize
FreeApplicative.productby @peterneyens - #1910 Add
NonEmptyList.ofInitLastby @eddsteel - #1888 Enhances stack safety for
Eval. by @non - #1885 Add
zipWithtoNonEmptyListandNonEmptyVectorby @LukaJCB - #1882 convert trait into abstract class for better bin compact by @kailuowang
- #1878 Add some instances we were missing. by @non
- #1858 Add
NonEmptyList#partitionEby @LukaJCB - #1847 Add right and left functor to
BiFunctorby @LukaJCB - #1840 Add
FoldableandTraversableinstances forFreeby @aaronlevin - #1819 Added more implementations of
map2Evalin progress by @johnynek - #1811 Move tuple
Cartesiansyntax implicit parameter by @DavidGregory084 - #1809 Add iterateWhileM and iterateUntilM by @drbild
- #1790 Implement EitherT#leftFlatMap and EitherT#leftSemiflatMap by @vendethiel
- #1784 Add
existsMandforallMto Foldable by @refried - #1712 Hash typeclass by @ctongfei
- #1976 Reduced usage of
foldinValidatedfor better performance by @kailuowang - #1967 Add a few type classes to generated tuple instances by @edmundnoble/@kailuowang
- #1984 Welcome, Alleycats by @kailuowang
- #1927 Add
CommutativeApplyandCommutativeApplicativeby @LukaJCB - #1837 Add
Paralleltype class by @LukaJCB - #1998 Add
Validated.condandValidated.condNelby @andyscott
Bug fixes:
- #1917 Don't use package object convention for object source path by @travisbrown
- #1804 workaround for a possible scala bug in show for value class by @kailuowang
Documentation Improvements/Additions:
- #1970 Add docs for
StateTandIndexedStateTby @iravid - #1956 Mention the right issue number of doom. by @hrhino
- #1952 Added examples of
Arrowcomposition by @raymondtay - #1946 Give higher priority to partial-unification fix by @LukaJCB
- #1944 Fix typo. by @jooohn
- #1924 Add docs for Arrow by @zliu41
- #1923 Update footer by @kailuowang
- #1920 Document naming implicits according to @non s comment in #1061 by @tbje
- #1916 Fix tiny extra vowel typo by @andyscott
- #1915 Consolidate readme.md and index.md by @kailuowang
- #1913 updated footer by @kailuowang
- #1905 s/rewrites/rules and update scalafix version in the README by @gabro
- #1903
Validatedbeginners doc by @AlejandroME - #1901 added FAQ item diff between cats and scalaz by @kailuowang
- #1900 add newts to related projects by @kailuowang
- #1899 Fix symbol signature for right and left apply in faq.md by @suhasgaddam
- #1897 add bin compat goal by @kailuowang
- #1895 trying to fix contributing page by @kailuowang
- #1894 Fix typo in background image of homepage. by @Ttcao
- #1890 Doc: Correct the URL of cats-mtl to the typelevel repository by @richardimaoka
- #1884 Rename typeclass => type class in Readme.md by @LukaJCB
- #1880 Add law testing guide by @LukaJCB
- #1875 Fix typo in
SemigroupKscaladoc by @LukaJCB - #1874 Fix typo in
WriterTtests by @LukaJCB - #1873 Add pureconfig and finch to ecosystem project list by @kailuowang
- #1872 Fix couple of typos in CHANGES.md by @LukaJCB
- #1871 Fix typo in
Traverse#traverseWithIndexMby @LukaJCB - #1857 Fix typo (Foldabale => Foldable) by @LukaJCB
- #1856 Remove mtl classes from menu by @LukaJCB
- #1854 Add E...
Cats 1.0.0-MF
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.
catsno longer publishes the all-inclusive bundle package"org.typelevel" % "cats", usecats-core,cats-free, orcats-law
accordingly instead. If you needcats.free, use"org.typelevel" % "cats-free", if you needcats-lawsuse
"org.typelevel" % "cats-laws", if neither, use"org.typelevel" % "cats-core".cats.free.Injectis moved fromcats-freetocats-coreand renamed tocats.InjectK;
cats.data.Prodis renamed tocats.data.Tuple2K;cats.data.Coproductis renamed to
cats.data.EitherK- All
Unapplyenabled 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,MonadWriterandTraverseFilterare no longer incats, 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 "mapNnot 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 fromcats.syntax.tuple._tocats.syntax.apply._and renamed tomapN,contramapNandimapNrespectively. - The creation methods (
left,right,apply,pure, etc.) inEitherTwere improved to take less
type arguments. - Several
cats-coretype class instances forcats.kernelwere moved from their companion objects to separate traits
and thus require imports fromcats.instances.xxx._(or the recommendedimport cats.implicits._) now. See #1659 for more details. Free.suspendis renamed toFree.deferfor consistency.traverse1_,intercalate1andsequence1_inReduciblewere renamed tononEmptyTraverse_,nonEmptyIntercalateandnonEmptySequence_respectively.foldLeftMis removed fromFree, usefoldMonFoldableinstead, see #1117 for detail.iteratorFoldMwas removed fromFoldabledue to #1716Splitis removed, and the methodsplitis moved toArrow. Note that only underCommutativeArrowdoes 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:
- #1614: added
leftTand improved existing lift API forEitherT. by @kailuowang - #1596: Rename
InjecttoInjectK. by @andyscott - #1589: Rename
Prod,CoproducttoTuple2KandEitherK. by @kailuowang - #1583: Enable SI-2712 fix in cats / Remove unapply machinery. by @kailuowang
- #1679: remove
Unapplyclass. by @kailuowang - #1557: Improvements to
Inject. @sellout - #1659: move instances into separate trait. by @yilinwei
- #1709: Rename
suspendtodefer. by @peterneyens - #1611: Renamed
traverse1_,intercalate1andsequence1_inReducible. by @LukaJCB - #1117:
foldLeftMwithoutFree. by @TomasMikula - #1487:
Applysyntax for tuples. by @DavidGregory084 - #1745: Deprecate
CartesianBuilder. by @kailuowang - #1758: stop publishing cats all bundle , start to publish cats-testkit. by @kailuowang
- #1766: Replace
SplitwithCommutativeArrow, introducesCommutativeMonad. by @diesalbla - #1751: Removed
FunctorFilter,MonadCombine,MonadFilter,MonadReader,MonadState,MonadTrans,MonadWriter,TraverseFilter. by @edmundnoble
New Features (API, instances, data types, etc):
- #1707: Add NEL/NEV one. by @peterneyens
- #1680:
by @wedensMonadTransinstance for RWST and makeMonadTransserializable. - #1658: Add
Validated.validNel. by @edmundnoble - #1651:
Add state method toby @oskoiMonadState. - #1628: add init and size methods to
NonEmptyList. by @jtjeferreira - #1612: Add ensureWith to
ValidatedandEither(#1550). by @LukaJCB - #1598: Implement a
ReaderWriterStateTdata type . by @iravid - #1706: Clean up
ReaderWriterStateT. by @peterneyens - #1594: Add
NonEmptyList#fromFoldable. by @markus1189 - #1611: Added
NonEmptyTraverse. by @LukaJCB - #1592: added instances of
BitSettoallInstances. by @kailuowang - #1586: Add
Applicative.unit. by @alexandru - #1584: Move arbitrary instance of
StateTto laws. by @kailuowang - #1580: add
groupBytoNonEmptyListandgroupByNeltoListsyntax @julien-truffaut - #1578: add
last,sortByandsortedtoNonEmptyList. by @julien-truffaut - #1571: added
whileM,untilM,iterateWhile, etc toMonad. by @tpolecat & @kailuowang - #1548:
MonadErrorinstance forIor. by @leandrob13 - #1543:
MonadErrorinstance forKleisli. by @durban - #1540:
Iorsyntax. by @leandrob13 - #1537: Add
FlatMap.forEffect. by @cranst0n - #1531: Add piecemeal import for
MonadError. by @peterneyens - #1526:
Injectfor free programs. by @tpolecat - #1464: Adding
getforFoldable. by @yilinwei - #1602: Stack-safe
Coyoneda. by @edmundnoble - #1725: Add
InjectKlaws. by @andyscott - #1728: Adds an
Asclass which represents subtyping relationships (Liskov). by @stew - #1178: Add
Isconstructor for Leibniz equality. by @tel - #1611: Add
NonEmptyTraversetypeclass. by @LukaJCB - #1736: Added
StackSafeMonadmixin. by @djspiewak - #1600:
InjectforEither. by @andyscott - #1746: Add
EitherNeltype alias forEither[NonEmptyList[E], A]. by @andyscott - #1670: Add
Order->Orderingimplicit conversion to implicits, instances. by @edmundnoble - #1649: Make
Showinherit from a contravariant base trait forshowstring interpolator to be covariant. by @edmundnoble - #1761: Add index related helpers to
Traverse. by @andyscott - #1769: Add
Kleislitap,tapWith. by @tpolecat - #1739: Add
onErrorandadaptErrortoApplicativeError/MonadError. by @SystemFw - #1644: Add
MonadErrorinstance forEitherTthat recovers fromF[_]errors. by @leandrob13 - #1748: Stack-safe
FreeAppplicative. by @edmundnoble - #1516: Implement
NonEmptyList#Collect. by @xavier-fernandez
Code improvements:
- #1660: Override
fromTryandfromEitherforTryand `...
Cats 0.9.0
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 + v2This code now works equivalently on all supported Scala versions.
Changes:
- #1424:
NonEmptyListandNonEmptyVectorare now covariant - #1506:
flatMapprovided byEithersyntax matches 2.12'sEither#flatMap - #1466: Improved stack safety for
StateT - #1510:
catchNonFatalforFutureis now asynchronous
Bug fixes:
New type class instances:
Other additions:
- #1446:
Cofreecomonad - #1520 and #1522:
intercalateforFoldable(andintercalate1forReducible) - #1454:
asLeftandasRightsyntax methods for creatingEithervalues - #1468:
tupleLeftandtupleRightforFunctor - #1500:
putLeft,putRight,mergeLeft, andmergeRightmethods forIor - #1495:
showstring interpolator - #1448:
Validated#findValid(likeorElsebut error accumulating) - #1455:
reverseforNonEmptyList - #1517:
zipWithIndexforNonEmptyList - #1512 and #1514:
filterNotforNonEmptyListandNonEmptyVector - #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
SemigroupandMonoid - #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
SemigroupKandMonoidKinstances - #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.
Cats 0.8.1
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):
Cats 0.8.0
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:
XorandXorTare gone - #1370:
RecursiveTailRecMandFree#foldMapUnsafeare gone and stack safety is checked in the laws forMonad - #1411:
FreeT#interpretis deprecated in favor of the (equivalent)compile
Additions:
- #1382, #1415: Support for Scala 2.12.0-RC2
- #1414:
Foldable#iteratorFoldMand lazyfoldMimplementations for many standard library instances - #1356:
appendandprepend(and operator aliases) forNonEmptyVector - #1327:
EitherT.fromOption - #1388:
StateT.setandStateT.setF - #1392:
StateT.get - #1325:
WriterT.lift - #1391:
MonadReader#reader - #1352: Macro-powered
FunctionK.lift - #1398:
<<<and>>>aliases forCompose'scomposeandandThen - #1408:
toNestedValidatedandtoNestedValidatedNelforEitherT - #1399:
Order.fromComparable - #1394:
Traverse#flatSequence - #1417:
MonadTests#stackUnsafeMonadlaws for instances wheretailRecMis known to be unsafe - #1411:
compileandfoldMapfor theFreeandFreeTcompanion objects
New instances:
- #1319:
OrderandGroupforBigDecimal - #1354:
SemigroupforIor - #1395:
OrderforSymbol - #1324:
PartialOrderand other instances forBitSet - #1324:
EqandPartialOrderforEither - #1324:
PartialOrder,Monoid, and other instances forFunction0 - #1324:
Monoidand other instances forFunction1 - #1402:
Monad,MonadCombine,Traverse,Order, etc. forProd - #1413:
MonadErrorforStateT - #1399: Instances for
java.util.UUID
Renaming and rearrangements:
- #1385: The
cats.js.stdpackage is nowcats.js.instances - #1324: Many instances moved from cats-core to cats-kernel
- #1394:
Traverse#traverseMis nowflatTraverse
Miscellaneous improvements (syntax, documentation, tests):
- #1347: Consistency laws for
combineAllandcombineAllOption - #1324: Performance improvements for
Eitherinstances - #1386:
FunctionKtests and examples now use kind-projector 0.9's polymorphic lambdas - #1410: Replace
Coproduct#runwithCoproduct#fold - #1331: Less expensive
tailRecM-flatMapconsistency 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:
Cats 0.7.2
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.
Changes
Fixes:
- #1347: fixes broken
Monoid[Map[K, V]].combineAllimplementation. - #1304: fix
CoflatMapdocumentation. - #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.
Cats 0.7.0
Version 0.7.0 is the seventh Cats release, and includes several major rearrangements and changes to names.
Migration notes
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.stdwill need to be changed tocats.instances(#1140). If you're usingcats.std.allor the othercats.stdobjects 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). NonEmptyListandNonEmptyVectorare no longer type aliases forOneAnd, so any code usingOneAndto construct or pattern match on these types will need to be changed to useNonEmptyListorNonEmptyVectordirectly. There are also some API changes; for example,unwrapcalls will need to be replaced bytoListortoVector, andNonEmptyList(1, 2, 3)is nowNonEmptyList.of(1, 2, 3).pureEvalhas 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
NaturalTransformationwill need to be replaced by eitherFunctionKor~>. - The
FlatMaptype class now has atailRecMmethod that is designed to support stack-safe recursive monadic binding. If your monad'sflatMapis stack safe, you can implement a stack-safetailRecMby callingMonad#defaultTailRecM. The stack safety oftailRecMis not enforced, but if your implementation is stack safe, you should also provide an instance of theRecursiveTailRecMmarker type class. - If you are interpreting a free algebra into a context
FwithfoldMap, you'll now needFto have an instance of theRecursiveTailRecMmarker type class (in addition to theMonadinstance).
If you run into any issues while updating, please get in touch on Gitter.
Changes
This release includes a fix for a bug in 0.6.0 (also fixed in 0.6.1):
- #1062:
Orderinstances for tuples are now lexicographic (instead of only comparing first elements)
And other bug fixes:
- #1096:
injandprjonInjectnow work consistently with respect tonull
And some additions:
- #1289 and #1306:
EitherTand improvedEithersyntax - #1280:
FlatMapnow has atailRecMmethod - #1280:
RecursiveTailRecMmarker type class indicating thattailRecMis stack safe - #1266:
FreeTmonad transformer - #1225:
FunctorFilterandTraverseFilter - #1121:
valueOrandmergeforValidated - #1188:
toValidatedNelforXorT - #1127:
toTryforXor - #1269:
catchNonFatalforApplicativeError - #1130:
isEmptysyntax method forMonoid - #1167:
minimum,maximum, and related helper methods forFoldableandReducible - #1243:
distinctonNonEmptyListandNonEmptyVector - #1134:
cats.syntax.listfor à la carte list syntax imports - #1191:
cats.syntax.monoidfor à la carteMonoidsyntax imports - #588 and #1063:
IdT, the identity monad transformer - #1021 and #1221:
Nested(represents nested composition of type constructors) - #1172:
toNestedforOptionTandXorT - #1102 and #1170:
Comparison(represents the result of anOrdercomparison) - #1090:
Kleisli.lift - #1169:
lift,inspect, and related methods forStateT - #1114:
sizeforFoldable - #1193:
reduceLeftMforReducible - #1097: Functor variance helpers (
widenforFunctorandnarrowforContravariant) - #1207:
tellforWriterandWriterT,valueforWriter - #1155: Convenience methods for constructing
XorTvalues - #1085:
runTailRecandfoldLeftMforFree - #1299:
ContravariantCartesiantype class
And some name changes:
- #1140:
cats.stdis nowcats.instances - #1066, #1068, #1110, and #1122: More unique type class instance names
- #1072:
NaturalTransformationis nowFunctionK - #1085:
mapSuspensiononFreeis nowcompile - #1111:
Free.Gosubis nowFree.FlatMapped - #1133:
Composite*traits for binary type classes are renamed toComposed*for consistency (and are now private)
And other API changes:
- #1231:
NonEmptyListis now a case class instead of a type alias for aOneAnd - #1137:
NonEmptyVectoris now a value class instead of a type alias for aOneAnd - #1267: Overloaded variadic
applyonNonEmptyListandNonEmptyVectoris nowof - #1234:
Applicative#pureEvalhas been removed - #1202:
MonadFilterno longer has afilterMmethod (see #1225) - #1075:
foldMaponFreenow requires aMonadRecinstance (instead of simplyMonad) - #1085:
Free.suspendno longer requires anApplicativeinstance - #1084: Safer
toStringforFreeandFreeApplicative - #1100: Simplified constraints for methods on
Xorand related types - #1171: Prioritization traits are now private
And many new instances:
- #1059 and #1147:
Monoid,MonadError, and other instances forscala.util.Try - #1299:
MonadforTuple2 - #1211:
ContravariantforEq - #1220:
TraverseandComonadforTuple2 - #1103:
Order,MonadError, and other instances forOptionT - #1106:
SemigroupandMonoidforXorT - #1138:
SemigroupKandMonadCombineforStateT - #1128
SemigroupandMonoidforApplicative - #1049:
CoflatMapforWriterT - #1076 and #1261:
MonadRecinstances forEval,StateT, andFuture - #1105:
Unapplyinstances forNestedshapes
And miscellaneous improvements to style and performance:
And improvements to the documentation:
Cats 0.6.1
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