All Versions
58
Latest Version
Avg Release Cycle
21 days
Latest Release
-

Changelog History
Page 5

  • v1.0.1 Changes

    2017 Dec 31

    πŸš€ There is zero code change since 1.0.0. This is a release to fix the 1.0.0-MF issue that on Maven 1.0.0-MF is deemed later than 1.0.0. πŸ‘€ For details see #2131

  • v1.0.0 Changes

    2017 Dec 25

    πŸ“š Documentation Improvements/Additions:

    • ⚑️ #2121 Update deprecations to product{L,R} instead of ap{L,R} by @rossabaker
    • βœ… #2086 Add doctest examples for Apply by @ceedubs
    • #2080 Add grouping to scaladoc for arity methods by @ceedubs
  • v1.0.0-RC2 Changes

    2017 Dec 18

    πŸ’₯ Breaking changes and migration

    • 🚚 #2039 Remove Applicative#traverse and Applicative#sequence by @kubukoz
    • #2033 standardise on liftF and add liftK to transformers by @SystemFw
    • #2083 Change forEffect/followedBy to productL/productR by @Jacoby6000
    • #2088 Add InvariantSemigroupal and ability to turn Monoidals to Monoids by @LukaJCB

    πŸ†• New features / enhancements (API, instances, data types, etc.):

    • #1949 Add ::: to NonEmptyList by @jcranky
    • #2020 Add foldl and foldr aliases to Foldable by @felixmulder
    • ⚑️ #2024 Optimize foldMap implementations with combineAll by @carymrobbins
    • #1938 Add more Parallel instances by @LukaJCB
    • #2030 added collectFirst and collectFirstSome to Foldable by @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.fromEither by @markus1189
    • #2056 Functor.fmap by @fosskers
    • #2059 Add Parallel instance for Ior by @andyscott
    • #2061 Add MonadError.rethrow by @SystemFw
    • 0️⃣ #2072 added a default id for Arrow by @kailuowang
    • πŸ”€ #2063 Added merge (product) to Arrow for 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 Comparison to cats package by @kailuowang
    • #2112 CoflatMap Instance for Applicative by @ChristopherDavenport
    • #2116 conversion PartialOrder to PartialOrdering and Hash to Hashing by @kailuowang
    • #2100 Add comparison method in Order companion 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.fromOptions by @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
  • v1.0.0-RC1 Changes

    2017 Oct 21

    πŸš€ This is the only planned release candidate release prior to 1.0.0.

    πŸ’₯ Breaking changes and migration

    • #1964 Require an Order instance for NonEmptyList's groupBy function by @igstan
    • #1961 rename Cartesian to Semigroupal by @kailuowang
    • πŸ—„ #1955 Deprecate FlatMap's >> and << by @LukaJCB
    • #1947 Rename EitherT.liftT to EitherT.liftF by @aeons
    • #1934 Restruct functor by @kailuowang
    • #1803 Convert ReaderWriterStateT to IndexedReaderWriterStateT by @iravid
    • #1775 Convert StateT to IndexedStateT by @iravid
    • #1098 Add a different MonoidK and SemigroupK instance for Kleisli by @peterneyens
    • #1922 Make kernel laws consistent with core laws by @LukaJCB
    • πŸ”€ #1838 Sync NonEmptyList and NonEmptyVector methods by @durban
    • #1914 Add Invariant instances for kernel type classes by @LukaJCB
    • #1980 Make iterateRight in Foldable sound by @LukaJCB
    • 🚚 #1972 Add SortedMap and SortedSet instances/Move Set and Map instances to Alleycats by @LukaJCB/@kailuowang
    • #1997 Minimizing typeclass surface in cats-kernel by @denisrosset
    • #1987 Add mapK to transformers by @andyscott / @LukaJCB

    To migrate from 1.0.0-MF.

    • πŸ‘€ The rename of Cartesian to Semigroupal and EitherT.liftT to EitherT.liftF can be done automatically through Scalafix we provide. See instructions here.
    • For FlatMap's >> and <<, use Apply's *> and <* instead.
    • πŸ“¦ Profunctor and Strong were moved to the cats.arrow package, Bifunctor, Invariant and Contravariant were moved to the cats root package.
    • SemigroupK[Ξ»[Ξ± => Kleisli[F, Ξ±, Ξ±]]] and MonoidK[Ξ»[Ξ± => Kleisli[F, Ξ±, Ξ±]]] are no longer implicitly available, Use Kleisli.endoSemigroupK and Kleisli.endoMonoidK to get them explicitly.
    • βœ… law testing for type classes in cats.kernel was made consistent with the law testing in cats.core. Check here for a guide on how to test cats type class instances.
    • πŸ—„ NonEmptyList.concat that takes NonEmptlyList was deprecated, use NonEmptyList.concatNel instead.
    • Monoid no longer has a InvariantMonoidal instance, we discovered that it's not lawful. It has have an Invariant and a Semigroupal (new name for Cartesian) instance.
    • πŸ‘€ Foldable.iterateRight now takes an Iterable instead of Iterator, see #1973 for rationale.
    • πŸ‘€ Foldable for Set and Traversable for Map were moved to Alleycats, see #1831 for rationale.
    • πŸ—„ cats.data.Kleisli#transform and cats.free.Coyoneda#transform were deprecated and replaced by mapK

    πŸ†• 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/Duration by @ctongfei
    • #1942 add traverseN to cartesian syntax by @julien-truffaut
    • #1939 Add guard to Alternative by @SystemFw
    • #1933 Add syntax for ApplicativeError.fromEither by @tpolecat
    • ⚑️ #1921 Optimize FreeApplicative.product by @peterneyens
    • #1910 Add NonEmptyList.ofInitLast by @eddsteel
    • #1888 Enhances stack safety for Eval. by @non
    • #1885 Add zipWith to NonEmptyList and NonEmptyVector by @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#partitionE by @LukaJCB
    • #1847 Add right and left functor to BiFunctor by @LukaJCB
    • πŸ†“ #1840 Add Foldable and Traversable instances for Free by @aaronlevin
    • #1819 Added more implementations of map2Eval in progress by @johnynek
    • 🚚 #1811 Move tuple Cartesian syntax implicit parameter by @DavidGregory084
    • #1809 Add iterateWhileM and iterateUntilM by @drbild
    • #1790 Implement EitherT#leftFlatMap and EitherT#leftSemiflatMap by @vendethiel
    • #1784 Add existsM and forallM to Foldable by @refried
    • #1712 Hash typeclass by @ctongfei
    • 🐎 #1976 Reduced usage of fold in Validated for better performance by @kailuowang
    • #1967 Add a few type classes to generated tuple instances by @edmundnoble/@kailuowang
    • #1984 Welcome, Alleycats by @kailuowang
    • #1927 Add CommutativeApply and CommutativeApplicative by @LukaJCB
    • #1837 Add Parallel type class by @LukaJCB
    • #1998 Add Validated.cond and Validated.condNel by @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
    • #1980 Make iterateRight in Foldable sound by @LukaJCB

    πŸ“š Documentation Improvements/Additions:

    • πŸ“„ #1970 Add docs for StateT and IndexedStateT by @iravid
    • #1956 Mention the right issue number of doom. by @hrhino
    • #1952 Added examples of Arrow composition 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 Validated beginners 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 SemigroupK scaladoc by @LukaJCB
    • βœ… #1874 Fix typo in WriterT tests 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#traverseWithIndexM by @LukaJCB
    • #1857 Fix typo (Foldabale => Foldable) by @LukaJCB
    • 🚚 #1856 Remove mtl classes from menu by @LukaJCB
    • πŸ“„ #1854 Add EitherT docs by @Technius
    • #1846 Add grafter to 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 Ior by @LukaJCB
    • #1820 Fix links by @n4to4
    • #1817 Add seals to related projects by @durban
    • πŸ“š #1816 Add Eval documentation 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/forallM to docs by @refried
    • #1792 Add size control for typeclass diagram by @LukaJCB
    • πŸ“š #1789 Add documentation for Show by @LukaJCB
    • πŸ“„ #1788 Add Eq docs by @LukaJCB
    • πŸ“„ #1787 Add NonEmptyTraverse docs 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 Reducible docs by @LukaJCB
    • βœ… #1985 Links "LawTesting.md" in FAQ and TypeClasses pages by @AlejandroME
    • #1993 Added examples for Cokleisli by @raymondtay

    ⚑️ Build improvements/dependency updates

    • ⚑️ #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

    βœ… Testing improvements

    • 🚚 #1963 Move followedBy/forEffect tests to ApplyTests by @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 Alternative law checking for IndexedStateT. by @iravid
    • βœ… #1975 Unifies test naming standard. by @AlejandroME
    • #1999 Fix order of comparison for EitherT.cond. by @andyscott

    Scalafix for migration

    • 🚚 #1813 Add RenameInjectProdAndCoproduct, RenameTupleApplySyntax and RemoveSplit Scalafix rewrites by @gabro
    • #1937 Add scalafix for contramap by @LukaJCB
  • v1.0.0-MF Changes

    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.

    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.

    • cats no longer publishes the all-inclusive bundle package "org.typelevel" % "cats", use cats-core, cats-free, or cats-law accordingly instead. If you need cats.free, use "org.typelevel" % "cats-free", if you need cats-laws use "org.typelevel" % "cats-laws", if neither, use "org.typelevel" % "cats-core".
    • cats.free.Inject is moved from cats-free to cats-core and renamed to cats.InjectK; cats.data.Prod is renamed to cats.data.Tuple2K; cats.data.Coproduct is renamed to cats.data.EitherK
    • All Unapply enabled 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, MonadFilter, MonadReader, MonadState, MonadTrans, MonadWriter and TraverseFilter are no longer in cats, the functionalities they provided are inherited by the new cats-mtl project. Please check here for migration guide.
    • MonadCombine is no longer in cats. Use Alternative or Monad + MonoidK instead.
    • 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 "mapN not 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 from cats.syntax.tuple._ to cats.syntax.apply._ and renamed to mapN, contramapN and imapN respectively.
    • The creation methods (left, right, apply, pure, etc.) in EitherT were improved to take less type arguments.
    • Several cats-core type class instances for cats.kernel were moved from their companion objects to separate traits and thus require imports from cats.instances.xxx._ (or the recommended import cats.implicits._) now. See #1659 for more details.
    • Free.suspend is renamed to Free.defer for consistency.
    • traverse1_, intercalate1 and sequence1_ in Reducible were renamed to nonEmptyTraverse_, nonEmptyIntercalate and nonEmptySequence_ respectively.
    • foldLeftM is removed from Free, use foldM on Foldable instead, see #1117 for detail.
    • iteratorFoldM was removed from Foldable due to #1716
    • Split is removed, and the method split is moved to Arrow. Note that only under CommutativeArrow does 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 leftT and improved existing lift API for EitherT. by @kailuowang
    • #1596: Rename Inject to InjectK. by @andyscott
    • #1589: Rename Prod, Coproduct to Tuple2K and EitherK. by @kailuowang
    • #1583: Enable SI-2712 fix in cats / Remove unapply machinery. by @kailuowang
    • #1679: remove Unapply class. by @kailuowang
    • #1557: Improvements to Inject. @sellout
    • #1659: move instances into separate trait. by @yilinwei
    • #1709: Rename suspend to defer. by @peterneyens
    • #1611: Renamed traverse1_, intercalate1 and sequence1_ in Reducible. by @LukaJCB
    • #1117: foldLeftM without Free. by @TomasMikula
    • #1487: Apply syntax for tuples. by @DavidGregory084
    • #1745: Deprecate CartesianBuilder. by @kailuowang
    • #1758: stop publishing cats all bundle , start to publish cats-testkit. by @kailuowang
    • #1766: Replace Split with CommutativeArrow, introduces CommutativeMonad. 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: MonadTrans instance for RWST and make MonadTrans serializable. by @wedens
    • #1658: Add Validated.validNel. by @edmundnoble
    • #1651: Add state method to MonadState. by @oskoi
    • #1628: add init and size methods to NonEmptyList. by @jtjeferreira
    • #1612: Add ensureWith to Validated and Either (#1550). by @LukaJCB
    • #1598: Implement a ReaderWriterStateT data type . by @iravid
    • #1706: Clean up ReaderWriterStateT. by @peterneyens
    • #1594: Add NonEmptyList#fromFoldable. by @markus1189
    • #1611: Added NonEmptyTraverse. by @LukaJCB
    • #1592: added instances of BitSet to allInstances. by @kailuowang
    • #1586: Add Applicative.unit. by @alexandru
    • #1584: Move arbitrary instance of StateT to laws. by @kailuowang
    • #1580: add groupBy to NonEmptyList and groupByNel to List syntax @julien-truffaut
    • #1578: add last, sortBy and sorted to NonEmptyList. by @julien-truffaut
    • #1571: added whileM, untilM, iterateWhile, etc to Monad . by @tpolecat & @kailuowang
    • #1548: MonadError instance for Ior. by @leandrob13
    • #1543: MonadError instance for Kleisli. by @durban
    • #1540: Ior syntax. by @leandrob13
    • #1537: Add FlatMap.forEffect. by @cranst0n
    • #1531: Add piecemeal import for MonadError. by @peterneyens
    • #1526: Inject for free programs. by @tpolecat
    • #1464: Adding get for Foldable. by @yilinwei
    • #1602: Stack-safe Coyoneda. by @edmundnoble
    • #1725: Add InjectK laws. by @andyscott
    • #1728: Adds an As class which represents subtyping relationships (Liskov). by @stew
    • #1178: Add Is constructor for Leibniz equality. by @tel
    • #1611: Add NonEmptyTraverse typeclass. by @LukaJCB
    • #1736: Added StackSafeMonad mixin. by @djspiewak
    • #1600: Inject for Either. by @andyscott
    • #1746: Add EitherNel type alias for Either[NonEmptyList[E], A]. by @andyscott
    • #1670: Add Order-> Ordering implicit conversion to implicits, instances. by @edmundnoble
    • #1649: Make Show inherit from a contravariant base trait for show string interpolator to be covariant. by @edmundnoble
      • #1761: Add index related helpers to Traverse. by @andyscott
      • #1769: Add Kleisli tap, tapWith. by @tpolecat
      • #1739: Add onError and adaptError to ApplicativeError/MonadError. by @SystemFw
      • #1644: Add MonadError instance for EitherT that recovers from F[_] errors. by @leandrob13
      • #1748: Stack-safe FreeAppplicative. by @edmundnoble
      • #1516: Implement NonEmptyList#Collect . by @xavier-fernandez

    Code improvements:

    • #1660: Override fromTry and fromEither for Try and Either. by @peterneyens
    • #1642: Unseal InjectK to allow for extension by other libraries. by @andyscott
    • #1641: Make InjectK use FunctionK.id for reflexive injection. by @andyscott
    • #1618: Override some methods in Kleisli instances. by @peterneyens
    • #1532: Override Foldable methods. by @peterneyens
    • #1456: Consistency for ops classes. by @edmundnoble
    • #1631: make all PartialApplied class value class to achieve zero cost. by @kailuowang
    • #1696: Make syntax.show extend ShowSyntax instead of Show.ToShowOps. by @edmundnoble

    πŸ› Bug fixes:

    • #1735: StateT no longer violates laws. by @djspiewak
    • 🚚 #1740: removed iteratorFoldM. by @kailuowang

    πŸ“š Other miscellaneous improvements (documentation, tests, build):

    • #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 Cogen for arbitrary instances. by @ceedubs
    • #1654: Update Circe URL. by @n4to4
    • #1653: Fix typo in FreeApplicative doc.. by @takayuky
    • #1647: Adds Freestyle to Related Projects list. 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 FunctionK document. 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 Discipline and ScalaTest. by @peterneyens
    • #1615: Fix doc for InvariantMonoidal. by @BenFradet
    • #1609: Include Id docs in the menu. by @ceedubs
    • #1591: Improve test coverage. by @peterneyens
    • #1590: Check monad laws for Cokleisli. by @peterneyens
    • #1588: Docs/Tutorial -- Simplify Kleisli example. by @RawToast
    • #1581: restore the alphabetical order of maintainers list. by @kailuowang
    • #1575: minor improvements to tailRecM doc. 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 OneAnd alias. by @peterneyens
    • #1561: Fix incorrect numbering in FreeMonads doc. by @cb372
    • #1555: fix scala.js badge version. by @xuwei-k
    • #1551: added MonadError and ApplicativeError to hierarchy diagram. by @kailuowang
    • #1547: fix ref to non-existent dir in contributing. by @sullivan-
    • #1546: add to Monad ifM example. by @sullivan-
    • #1545: fix scaladoc for Eval methods Unit, 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 Applicative doc.. 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 .html files 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
  • v0.9.0 Changes

    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 and NonEmptyVector are now covariant
    • #1506: flatMap provided by Either syntax matches 2.12's Either#flatMap
    • #1466: Improved stack safety for StateT
    • #1510: catchNonFatal for Future is now asynchronous

    πŸ› Bug fixes:

    • #1465 and #1507: Stack safety law for Monad#tailRecM is less eager and doesn't throw exceptions

    πŸ†• New type class instances:

    • #1475: Reducible instances for Eval and Id
    • #1484: Show instance for Symbol

    Other additions:

    • #1446: Cofree comonad
    • #1520 and #1522: intercalate for Foldable (and intercalate1 for Reducible)
    • #1454: asLeft and asRight syntax methods for creating Either values
    • #1468: tupleLeft and tupleRight for Functor
    • #1500: putLeft, putRight, mergeLeft, and mergeRight methods for Ior
    • #1495: show string interpolator
    • #1448: Validated#findValid (like orElse but error accumulating)
    • #1455: reverse for NonEmptyList
    • #1517: zipWithIndex for NonEmptyList
    • #1512 and #1514: filterNot for NonEmptyList and NonEmptyVector
    • #1480: FunctionK#and
    • #1481: EitherT.cond

    πŸ“š Miscellaneous improvements (syntax, documentation, tests):

    • #1513: Improved documentation for Functor, Applicative, and Traverse
    • #1440: Improved type class documentation
    • #1442: Improved documentation for Semigroup and Monoid
    • #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 and MonoidK instances
    • #1490: Avoid some duplication in build via sbt-travisci
    • #1497: Site list clean-up

    ⚑️ And version updates:

    • #1499: 2.12 version is now 2.12.1
    • #1509: Scala.js version is 0.6.14

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

  • v0.8.1 Changes

    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+
  • v0.8.0 Changes

    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 and XorT are gone
    • #1370: RecursiveTailRecM and Free#foldMapUnsafe are gone and stack safety is checked in the laws for Monad
    • #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 lazy foldM implementations for many standard library instances
    • #1356: append and prepend (and operator aliases) for NonEmptyVector
    • #1327: EitherT.fromOption
    • #1388: StateT.set and StateT.setF
    • #1392: StateT.get
    • #1325: WriterT.lift
    • #1391: MonadReader#reader
    • #1352: Macro-powered FunctionK.lift
    • #1398: <<< and >>> aliases for Compose's compose and andThen
    • #1408: toNestedValidated and toNestedValidatedNel for EitherT
    • #1399: Order.fromComparable
    • #1394: Traverse#flatSequence
    • #1417: MonadTests#stackUnsafeMonad laws for instances where tailRecM is known to be unsafe
    • #1411: compile and foldMap for the Free and FreeT companion objects

    πŸ†• New instances:

    • #1319: Order and Group for BigDecimal
    • #1354: Semigroup for Ior
    • #1395: Order for Symbol
    • #1324: PartialOrder and other instances for BitSet
    • #1324: Eq and PartialOrder for Either
    • #1324: PartialOrder, Monoid, and other instances for Function0
    • #1324: Monoid and other instances for Function1
    • #1402: Monad, MonadCombine, Traverse, Order, etc. for Prod
    • #1413: MonadError for StateT
    • #1399: Instances for java.util.UUID

    Renaming and rearrangements:

    • #1385: The cats.js.std package is now cats.js.instances
    • #1324: Many instances moved from cats-core to cats-kernel
    • #1394: Traverse#traverseM is now flatTraverse

    πŸ“š Miscellaneous improvements (syntax, documentation, tests):

    • #1347: Consistency laws for combineAll and combineAllOption
    • #1324: Performance improvements for Either instances
    • #1386: FunctionK tests and examples now use kind-projector 0.9's polymorphic lambdas
    • #1410: Replace Coproduct#run with Coproduct#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
  • v0.7.2 Changes

    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.

    πŸ”„ Changes

    πŸ›  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:

    • #1319: add missing BigDecimal instances.
    • #1324: add missing function and BitSet instances.

    πŸš€ Note that 0.7.2 was preceded 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.

  • v0.7.0 Changes

    2016 August 21

    πŸ”– 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.std will need to be changed to cats.instances (#1140). If you're using cats.std.all or the other cats.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 and NonEmptyVector are no longer type aliases for OneAnd, so any code using OneAnd to construct or pattern match on these types will need to be changed to use NonEmptyList or NonEmptyVector directly. There are also some API changes; for example, unwrap calls will need to be replaced by toList or toVector, and NonEmptyList(1, 2, 3) is now NonEmptyList.of(1, 2, 3).
    • 🚚 pureEval has been removed from Applicative (#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 either FunctionK or ~>.
    • 0️⃣ The FlatMap type class now has a tailRecM method that is designed to support stack-safe recursive monadic binding. If your monad's flatMap is stack safe, you can implement a stack-safe tailRecM by calling Monad#defaultTailRecM. The stack safety of tailRecM is not enforced, but if your implementation is stack safe, you should also provide an instance of the RecursiveTailRecM marker type class.
    • πŸ†“ If you are interpreting a free algebra into a context F with foldMap, you'll now need F to have an instance of the RecursiveTailRecM marker type class (in addition to the Monad instance).

    ⚑️ 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: Order instances for tuples are now lexicographic (instead of only comparing first elements)

    πŸ›  And other bug fixes:

    • #1096: inj and prj on Inject now work consistently with respect to null

    And some additions:

    • #1289 and #1306: EitherT and improved Either syntax
    • #1280: FlatMap now has a tailRecM method
    • #1280: RecursiveTailRecM marker type class indicating that tailRecM is stack safe
    • #1266: FreeT monad transformer
    • #1225: FunctorFilter and TraverseFilter
    • πŸ”€ #1121: valueOr and merge for Validated
    • #1188: toValidatedNel for XorT
    • #1127: toTry for Xor
    • #1269: catchNonFatal for ApplicativeError
    • #1130: isEmpty syntax method for Monoid
    • #1167: minimum, maximum, and related helper methods for Foldable and Reducible
    • #1243: distinct on NonEmptyList and NonEmptyVector
    • #1134: cats.syntax.list for Γ  la carte list syntax imports
    • #1191: cats.syntax.monoid for Γ  la carte Monoid syntax imports
    • #588 and #1063: IdT, the identity monad transformer
    • #1021 and #1221: Nested (represents nested composition of type constructors)
    • #1172: toNested for OptionT and XorT
    • #1102 and #1170: Comparison (represents the result of an Order comparison)
    • #1090: Kleisli.lift
    • #1169: lift, inspect, and related methods for StateT
    • #1114: size for Foldable
    • #1193: reduceLeftM for Reducible
    • #1097: Functor variance helpers (widen for Functor and narrow for Contravariant)
    • #1207: tell for Writer and WriterT, value for Writer
    • #1155: Convenience methods for constructing XorT values
    • πŸ†“ #1085: runTailRec and foldLeftM for Free
    • #1299: ContravariantCartesian type class

    And some name changes:

    • #1140: cats.std is now cats.instances
    • #1066, #1068, #1110, and #1122: More unique type class instance names
    • #1072: NaturalTransformation is now FunctionK
    • πŸ†“ #1085: mapSuspension on Free is now compile
    • πŸ†“ #1111: Free.Gosub is now Free.FlatMapped
    • #1133: Composite* traits for binary type classes are renamed to Composed* for consistency (and are now private)

    And other API changes:

    • #1231: NonEmptyList is now a case class instead of a type alias for a OneAnd
    • #1137: NonEmptyVector is now a value class instead of a type alias for a OneAnd
    • #1267: Overloaded variadic apply on NonEmptyList and NonEmptyVector is now of
    • 🚚 #1234: Applicative#pureEval has been removed
    • πŸ‘€ #1202: MonadFilter no longer has a filterM method (see #1225)
    • πŸ†“ #1075: foldMap on Free now requires a MonadRec instance (instead of simply Monad)
    • πŸ†“ #1085: Free.suspend no longer requires an Applicative instance
    • πŸ†“ #1084: Safer toString for Free and FreeApplicative
    • #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 for scala.util.Try
    • #1299: Monad for Tuple2
    • #1211: Contravariant for Eq
    • #1220: Traverse and Comonad for Tuple2
    • #1103: Order, MonadError, and other instances for OptionT
    • #1106: Semigroup and Monoid for XorT
    • #1138: SemigroupK and MonadCombine for StateT
    • #1128 Semigroup and Monoid for Applicative
    • #1049: CoflatMap for WriterT
    • #1076 and #1261: MonadRec instances for Eval, StateT, and Future
    • #1105: Unapply instances for Nested shapes

    🐎 And miscellaneous improvements to style and performance:

    • #1079: More consistent type lambdas
    • #1300: Much faster Monoid instances for Map

    πŸ“š 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!