Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft of 0.7.0 release notes #1259

Merged
merged 10 commits into from
Aug 21, 2016
14 changes: 14 additions & 0 deletions AUTHORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@ possible:
* Aaron Levin
* Adelbert Chang
* Aldo Stracquadanio
* Alejandro Gómez
* Alessandro Lacava
* Alexander Semenov
* Alexey Levan
* Alissa Pajer
* Alistair Johnson
* Amir Mohammad Saied
* Andrea Fiore
* Andrew Jones
* Angelo Genovese
* Antoine Comte
Expand All @@ -43,12 +46,14 @@ possible:
* Denis Mikhaylov
* Derek Wickern
* Edmund Noble
* Eric Torreborre
* Erik LaBianca
* Erik Osheim
* Eugene Burmako
* Eugene Yokota
* Feynman Liang
* Frank S. Thomas
* Hamish Dickson
* Ian McIntosh
* ImLiar
* Jean-Rémi Desjardins
Expand All @@ -63,41 +68,50 @@ possible:
* Luis Angel Vicente Sanchez
* Luis Sanchez
* Luke Wyman
* Madder
* Marc Siegel
* Markus Hauck
* mathhun
* Matt Martin
* Matthias Lüneberg
* Max Worgan
* Merlin Göttlinger
* Michael Pilquist
* Mike Curry
* Miles Sabin
* Olivier Blanvillain
* Olli Helenius
* Owen Parry
* P. Oscar Boykin
* Pascal Voitot
* Paul Phillips
* Pavkin Vladimir
* Pere Villega
* Peter Neyens
* Philip Wills
* Raúl Raja Martínez
* Richard Miller
* Rintcius Blok
* Rob Norris
* Romain Ruetschi
* Ross A. Baker
* Ryan Case
* Sarunas Valaskevicius
* Shunsuke Otani
* Simeon H. K. Fitch
* Sinisa Louc
* Stephen Carman
* Stephen Judkins
* Stew O'Connor
* Sumedh Mungee
* Taylor Brown
* Tomas Mikula
* Travis Brown
* Wedens
* Yosef Fertel
* yilinwei
* Zach Abbott
* zainab-ali

Cats has been heavily inspired by many libraries, including [Scalaz](https://github.com/scalaz/scalaz),
Haskell's [Prelude](https://hackage.haskell.org/package/base-4.9.0.0/docs/Prelude.html), and others.
Expand Down
134 changes: 134 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,137 @@
## Version 0.7.0

> 2016 August 2

Version 0.7.0 is the seventh Cats release, and includes several major rearrangements and changes to names.

### Migration notes
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for adding this section @travisbrown. I think this will be really helpful for people.


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](https://github.com/typelevel/cats/pull/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](https://github.com/typelevel/cats/pull/1066), [#1068](https://github.com/typelevel/cats/pull/1068), [#1110](https://github.com/typelevel/cats/pull/1110), and [#1122](https://github.com/typelevel/cats/pull/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](https://github.com/typelevel/cats/pull/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.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What I suggested was to require a NaturalTransformation[Eval, M] if you need to create an M[T] from an Eval[T]. For M[T] with laziness, you can do something non-trivial.

* All references to `NaturalTransformation` will need to be replaced by either `FunctionK` or `~>`.
* 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](https://gitter.im/typelevel/cats).

### Changes

This release includes a fix for a bug in 0.6.0 (also fixed in 0.6.1):

* [#1062](https://github.com/typelevel/cats/pull/1062): `Order` instances for tuples are now lexicographic (instead of only comparing first elements)

And other bug fixes:

* [#1096](https://github.com/typelevel/cats/pull/1096): `inj` and `prj` on `Inject` now work consistently with respect to `null`

And some additions:

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

And some name changes:

* [#1140](https://github.com/typelevel/cats/pull/1140): `cats.std` is now `cats.instances`
* [#1066](https://github.com/typelevel/cats/pull/1066), [#1068](https://github.com/typelevel/cats/pull/1068), [#1110](https://github.com/typelevel/cats/pull/1110), and [#1122](https://github.com/typelevel/cats/pull/1122): More unique type class instance names
* [#1072](https://github.com/typelevel/cats/pull/1072): `NaturalTransformation` is now `FunctionK`
* [#1085](https://github.com/typelevel/cats/pull/1085): `mapSuspension` on `Free` is now `compile`
* [#1111](https://github.com/typelevel/cats/pull/1111): `Free.Gosub` is now `Free.FlatMapped`
* [#1133](https://github.com/typelevel/cats/pull/1133): `Composite*` traits for binary type classes are renamed to `Composed*` for consistency (and are now private)

And other API changes:

* [#1231](https://github.com/typelevel/cats/pull/1231): `NonEmptyList` is now a case class instead of a type alias for a `OneAnd`
* [#1137](https://github.com/typelevel/cats/pull/1137): `NonEmptyVector` is now a value class instead of a type alias for a `OneAnd`
* [#1267](https://github.com/typelevel/cats/pull/1267): Overloaded variadic `apply` on `NonEmptyList` and `NonEmptyVector` is now `of`
* [#1234](https://github.com/typelevel/cats/pull/1234): `Applicative#pureEval` has been removed
* [#1202](https://github.com/typelevel/cats/pull/1202): `MonadFilter` no longer has a `filterM` method (see [#1225](https://github.com/typelevel/cats/pull/1225))
* [#1075](https://github.com/typelevel/cats/pull/1075): `foldMap` on `Free` now requires a `MonadRec` instance (instead of simply `Monad`)
* [#1085](https://github.com/typelevel/cats/pull/1085): `Free.suspend` no longer requires an `Applicative` instance
* [#1084](https://github.com/typelevel/cats/pull/1084): Safer `toString` for `Free` and `FreeApplicative`
* [#1100](https://github.com/typelevel/cats/pull/1100): Simplified constraints for methods on `Xor` and related types
* [#1171](https://github.com/typelevel/cats/pull/1171): Prioritization traits are now private

And many new instances:

* [#1059](https://github.com/typelevel/cats/pull/1059) and [#1147](https://github.com/typelevel/cats/pull/1147): `Monoid`, `MonadError`, and other instances for `scala.util.Try`
* [#1299](https://github.com/typelevel/cats/pull/1299): `Monad` for `Tuple2`
* [#1211](https://github.com/typelevel/cats/pull/1211): `Contravariant` for `Eq`
* [#1220](https://github.com/typelevel/cats/pull/1220): `Traverse` and `Comonad` for `Tuple2`
* [#1103](https://github.com/typelevel/cats/pull/1103): `Order`, `MonadError`, and other instances for `OptionT`
* [#1106](https://github.com/typelevel/cats/pull/1106): `Semigroup` and `Monoid` for `XorT`
* [#1138](https://github.com/typelevel/cats/pull/1138): `SemigroupK` and `MonadCombine` for `StateT`
* [#1128](https://github.com/typelevel/cats/pull/1128) `Semigroup` and `Monoid` for `Applicative`
* [#1049](https://github.com/typelevel/cats/pull/1049): `CoflatMap` for `WriterT`
* [#1076](https://github.com/typelevel/cats/pull/1076) and [#1261](https://github.com/typelevel/cats/pull/1261): `MonadRec` instances for `Eval`, `StateT`, and `Future`
* [#1105](https://github.com/typelevel/cats/pull/1105): `Unapply` instances for `Nested` shapes

And miscellaneous improvements to style and performance:

* [#1079](https://github.com/typelevel/cats/pull/1079): More consistent type lambdas
* [#1300](https://github.com/typelevel/cats/pull/1300): Much faster `Monoid` instances for `Map`

And improvements to the documentation:

* [#1145](https://github.com/typelevel/cats/pull/1145): Major rearrangements and additions
* [#1136](https://github.com/typelevel/cats/pull/1136): New chart for symbols
* [#1052](https://github.com/typelevel/cats/pull/1052): New "Why?" section
* [#1095](https://github.com/typelevel/cats/pull/1095), [#1226](https://github.com/typelevel/cats/pull/1226), and [#1227](https://github.com/typelevel/cats/pull/1227): New FAQ section
* [#1163](https://github.com/typelevel/cats/pull/1163): New import guide section
* [#1217](https://github.com/typelevel/cats/pull/1217), [#1223](https://github.com/typelevel/cats/pull/1223), and [#1239](https://github.com/typelevel/cats/pull/1239): New related projects
* [#1057](https://github.com/typelevel/cats/pull/1057) and [#1157](https://github.com/typelevel/cats/pull/1157): Copy-paste-friendly code blocks
* [#1104](https://github.com/typelevel/cats/pull/1104) and [#1115](https://github.com/typelevel/cats/pull/1115): Kitchen-sink imports in example code
* [#1050](https://github.com/typelevel/cats/pull/1050): Switch to [rouge](https://github.com/jneen/rouge) for syntax highlighting in the GitHub Pages site
* [#1119](https://github.com/typelevel/cats/pull/1119): Fix for `contramap` signature
* [#1141](https://github.com/typelevel/cats/pull/1141) and [#1162](https://github.com/typelevel/cats/pull/1162): Fixes for cats-kernel documentation
* [#1149](https://github.com/typelevel/cats/pull/1149): Spelling consistency for "type class"
* [#1183](https://github.com/typelevel/cats/pull/1183): More documentation about use of Machinist, Simulacrum, and kind-projector
* [#1056](https://github.com/typelevel/cats/pull/1056): Clarification about forgetful functors and the free monad
* [#1131](https://github.com/typelevel/cats/pull/1131) and [#1241](https://github.com/typelevel/cats/pull/1241): Simplified project structure listings
* [#1185](https://github.com/typelevel/cats/pull/1185), [#1186](https://github.com/typelevel/cats/pull/1186), and [#1189](https://github.com/typelevel/cats/pull/1189): Miscellaneous improvements for `Traverse` documentation

And the build:

* [#1159](https://github.com/typelevel/cats/pull/1159): Binary compatibility checking for cats-kernel via MiMa
* [#1256](https://github.com/typelevel/cats/pull/1256): More reliable Scala.js testing in Travis CI
* [#1123](https://github.com/typelevel/cats/pull/1123): cats-kernel is now included in the API documentation
* [#1051](https://github.com/typelevel/cats/pull/1051): Empty Scaladocs for 2.10 to avoid issues macros cause for API documentation generation on 2.10
* [#1154](https://github.com/typelevel/cats/pull/1154): Better POM hygiene: no Scoverage dependency
* [#1153](https://github.com/typelevel/cats/pull/1153) and [#1218](https://github.com/typelevel/cats/pull/1218): More consistent use of Simulacrum for syntax
* [#1093](https://github.com/typelevel/cats/pull/1093): Scalastyle is now aware of shared and Scala.js-specific source files
* [#1142](https://github.com/typelevel/cats/pull/1142): Additional formatting rules for Scalastyle
* [#1099](https://github.com/typelevel/cats/pull/1099): Type lambda style is now enforced by Scalastyle
* [#1258](https://github.com/typelevel/cats/pull/1258): Version updates for SBT and SBT plugins

We also welcome [Kailuo Wang](https://github.com/typelevel/cats/pull/1129), [Peter Neyens](https://github.com/typelevel/cats/pull/1179), and [Oscar Boykin](https://github.com/typelevel/cats/pull/1180) as new Cats maintainers!

## Version 0.6.1

> 2016 July 14
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ To get started with SBT, simply add the following to your `build.sbt`
file:

```scala
libraryDependencies += "org.typelevel" %% "cats" % "0.6.1"
libraryDependencies += "org.typelevel" %% "cats" % "0.7.0"
```

This will pull in all of Cats' modules. If you only require some
Expand All @@ -47,7 +47,7 @@ Release notes for Cats are available in [CHANGES.md](CHANGES.md).

*Cats is still under active development. While we don't anticipate any
major redesigns, changes that are neither source nor binary
compatibility are to be expected in upcoming cats releases. We will
compatible are to be expected in upcoming cats releases. We will
update the minor version of cats accordingly for such changes. Once
cats 1.0 is released (ETA: Q3 2016), there will be an increased focus
on making changes in compatible ways.*
Expand Down
2 changes: 1 addition & 1 deletion docs/src/site/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Cats is currently available for Scala 2.10 and 2.11.

To get started with SBT, simply add the following to your build.sbt file:

libraryDependencies += "org.typelevel" %% "cats" % "0.6.1"
libraryDependencies += "org.typelevel" %% "cats" % "0.7.0"

This will pull in all of Cats' modules. If you only require some
functionality, you can pick-and-choose from amongst these modules
Expand Down