2017 Oct 21
This is the only planned release candidate release prior to 1.0.0.
- #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
- #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
- #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
- #1980 Make
iterateRightinFoldablesound by @LukaJCB
- #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 EitherT docs by @Technius
- #1846 Add
grafterto the list of Typelevel projects using cats by @etorreborre - #1845 Adding the origami project to the list of Typelevel projects using cats by @etorreborre
- #1827 add trailing slashes to URLs by @larsrh
- #1822 Add docs for
Iorby @LukaJCB - #1820 Fix links by @n4to4
- #1817 Add seals to related projects by @durban
- #1816 Add
Evaldocumentation by @LukaJCB - #1814 remove outdated TODOs by @kailuowang
- #1808 minor link change by @kailuowang
- #1806 add notes to cartesian migration by @kailuowang
- #1799 add decline to project list by @kailuowang
- #1796 add
Foldable.existsM/forallMto docs by @refried - #1792 Add size control for typeclass diagram by @LukaJCB
- #1789 Add documentation for
Showby @LukaJCB - #1788 Add
Eqdocs by @LukaJCB - #1787 Add
NonEmptyTraversedocs by @LukaJCB - #1781 promoting the ecosystem in readme a bit and fixed a typo by @kailuowang
- #1779 quick date fix by @kailuowang
- #1756 Add piecemeal import guide by @LukaJCB
- #1777 Add
Reducibledocs by @LukaJCB - #1985 Links "LawTesting.md" in FAQ and TypeClasses pages by @AlejandroME
- #1993 Added examples for
Cokleisliby @raymondtay
- #1948 Update scalafix project dependencies by @aeons
- #1926 Update coursier to version 1.0.0-RC12 by @mxl
- #1925 temporarily disable MiMa check on kernel by @kailuowang
- #1918 Update sbt-microsites to 0.7.0 by @LukaJCB
- #1902 Upgrade Scalafix to 0.5.0-RC2 by @gabro
- #1898 Update various sbt plugins by @fthomas
- #1892 Remove deprecated requiresDOM setting by @fthomas
- #1889 Add val for "compile-time" sbt Configuration by @fthomas
- #1887 Update sbt-pgp to 1.1.0 by @fthomas
- #1886 Update Scala.js to 0.6.20 by @fthomas
- #1876 build: use curly braces for disabling tasks by @fthomas
- #1868 Update sbt-microsites to 0.6.1 by @BennyHill
- #1866 Revert scalatest to 3.0.3 by @BennyHill
- #1865 Set simulacrum version to 0.11.0 by @BennyHill
- #1864 Set scalaz version to 7.2.15 by @BennyHill
- #1862 Bump kind-projector version to 0.9.4 by @shokohara
- #1861 Update sbt-scoverage to 1.5.1 by @fthomas
- #1860 Update sbt-pgp to 1.1.0-M1 by @LukaJCB
- #1859 Update sbt-sonatype by @LukaJCB
- #1852 Remove sbt-ghpages because it is pulled in by sbt-microsites by @fthomas
- #1849 Update sbt-git to 0.9.3 by @fthomas
- #1844 Replace botBuild with sbt-travisci's isTravisBuild by @fthomas
- #1843 Update sbt-unidoc to 0.4.1 by @fthomas
- #1842 Update partial-unification plugin to 1.1.0 by @fthomas
- #1839 Update scalastyle-sbt-plugin to 1.0.0 by @fthomas
- #1829 Update sbt-release to 1.0.6 by @fthomas
- #1828 Update sbt-jmh to 0.2.27 by @fthomas
- #1826 Pass sbt settings without varargs expansion by @fthomas
- #1825 Update sbt-coursier to 1.0.0-RC10 by @fthomas
- #1824 Update sbt-mima-plugin to 0.1.17 by @fthomas
- #1821 Update sbt-doctest to 0.7.0 by @fthomas
- #1795 Bump discipline version to 0.8 by @shokohara
- #1793 Add Scalafix rewrites for 1.0.0 by @gabro
- #1782 Bump scalacheck version to 1.13.5 by @shokohara
- #1780 Bump machinist version to 0.6.2 by @shokohara
- #1778 Bump sbt version to 0.13.16 by @shokohara
- #1963 Move
followedBy/forEffecttests toApplyTestsby @peterneyens - #1960 Harmonize naming of discipline test classes in cats-kernel-laws. by @denisrosset
- #1953 Add a more direct tailRecM law. by @johnynek
- #1906 Fix
Alternativelaw checking forIndexedStateT. by @iravid - #1975 Unifies test naming standard. by @AlejandroME
- #1999 Fix order of comparison for
EitherT.cond. by @andyscott
- #1813 Add
RenameInjectProdAndCoproduct,RenameTupleApplySyntaxandRemoveSplitScalafix rewrites by @gabro - #1937 Add scalafix for
contramapby @LukaJCB
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 compatibility after 1.0.
We will give community some time to validate it before we release 1.0.0-RC1.
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-lawaccordingly 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 tocats.data.EitherK- All
Unapplyenabled methods, e.g.sequenceU,traverseU, etc. are removed.Unapplyenabled 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 inherited 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.
- #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
- #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
- #1660: Override
fromTryandfromEitherforTryandEither. by @peterneyens - #1642: Unseal
InjectKto allow for extension by other libraries. by @andyscott - #1641: Make
InjectKuseFunctionK.idfor reflexive injection. by @andyscott - #1618: Override some methods in
Kleisliinstances. by @peterneyens - #1532: Override
Foldablemethods. by @peterneyens - #1456: Consistency for ops classes. by @edmundnoble
- #1631: make all
PartialAppliedclass value class to achieve zero cost. by @kailuowang - #1696: Make
syntax.showextendShowSyntaxinstead ofShow.ToShowOps. by @edmundnoble
- #1699: Link to sbt-partial-unification plugin . by @Blaisorblade
- #1698: Update gitter chat room name to cats-dev. . by @kailuowang
- #1695: update ETA for 1.0.0 . by @kailuowang
- #1604: Add tut doc for
FunctionK. by @ceedubs - #1691: Build JVM before JS on travis. by @peterneyens
- #1677: Update readme with the new dev channel.. by @kailuowang
- #1673: Use 2 workers in JVM build. by @ceedubs
- #1671: Fixing
Eq[Function1]in testsJS; break JS build to separate matrix build. by @kailuowang - #1666: Use
Cogenfor arbitrary instances. by @ceedubs - #1654: Update Circe URL. by @n4to4
- #1653: Fix typo in
FreeApplicativedoc.. by @takayuky - #1647: Adds Freestyle to
Related Projectslist. by @raulraja - #1638: Make simulacrum a compile time only dependency. by @peterneyens
- #1637: show(f:T) to show(t:T). by @PeterPerhac
- #1636: added some category theory into
FunctionKdocument. by @kailuowang - #1632: upgraded to scala 2.12.2 and 2.11.11 and scalaJs. by @kailuowang
- #1629: add unit test for variance on methods in
EitherT. by @jtjeferreira - #1622: Update
DisciplineandScalaTest. by @peterneyens - #1615: Fix doc for
InvariantMonoidal. by @BenFradet - #1609: Include
Iddocs in the menu. by @ceedubs - #1591: Improve test coverage. by @peterneyens
- #1590: Check monad laws for
Cokleisli. by @peterneyens - #1588: Docs/Tutorial -- Simplify
Kleisliexample. by @RawToast - #1581: restore the alphabetical order of maintainers list. by @kailuowang
- #1575: minor improvements to
tailRecMdoc. by @kailuowang - #1570: fixed a paragraph order. by @kailuowang
- #1566: Fix mistake in documentation of
Group.remove. by @LukaJCB - #1563: Remove references of the NEL
OneAndalias. by @peterneyens - #1561: Fix incorrect numbering in
FreeMonadsdoc. by @cb372 - #1555: fix scala.js badge version. by @xuwei-k
- #1551: added
MonadErrorandApplicativeErrorto hierarchy diagram. by @kailuowang - #1547: fix ref to non-existent dir in contributing. by @sullivan-
- #1546: add to
MonadifMexample. by @sullivan- - #1545: fix scaladoc for
EvalmethodsUnit,True,False,Zero,One. by @sullivan- - #1541: Switch from CrossVersion.full to CrossVersion.patch for TLS compatibi…. by @milessabin
- #1530: add a favicon for sbt-microsite. by @larsrh
- #1529: Fix typo in
Applicativedoc.. by @cranst0n - #1525: Remove link to apply.html from menu. by @Leammas
- #1693: Clean up EitherT doctests. by @peterneyens
- #1697: Added two links to the learner page. by @kailuowang
- #1726: Add underscore.io Advanced Scala with Cats. by @DieBauer
- #1718: Fixed some things in the build. by @djspiewak
- #1734: update sbt. by @jyane
- #1737: Rewrote documentation on the IO monad to reference cats-effect. by @djspiewak
- #1744: Make links link to the
.htmlfiles instead of.md. by @LukaJCB - #1759: Faster tests by reducing the size of lists. @peterneyens
- #1760: Decrease stack-safety test size. by @edmundnoble
- #1752: More coverage. by @edmundnoble
- #1472: Using regular syntax in the FreeApplicative tutorial. by @denisftw
- #1565: added instance table to docs, enhanced typeclass diagram. by @kailuowang
- #1573: Add symbols to FAQ. by @zainab-ali
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 + 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.
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
defaultTailRecMfrom monad doc - #1441: Fixes #1438 by replacing quoted entry name
- #1432: Type class organization in documentation
- #1439: Update version on index
- #1451: Fix
Arbitraryinstances 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:
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:
- #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]].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.
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.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.
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:
- #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
contramapsignature - #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
Traversedocumentation
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
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
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
LiftTranstype class - #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.
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:
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.gitThis 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@104f8bbdOther 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.
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.
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.
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.