Migration guide
Here's a map from pre-1.x cats typeclasses to cats-mtl typeclasses:
- MonadReader --> Local
- MonadWriter --> Listen
- Stateful --> Stateful
cats typeclass parameters and context bounds have to be rewritten, to include base classes.
For example:
- [F[_]: MonadReader[?[_], E]] will have to be adjusted to [F[_]: Monad: Local[?[_], E]],
- [F[_]: MonadWriter[?[_], L]] will have to be adjusted to [F[_]: Monad: Listen[?[_], L]],
- [F[_]: Stateful[?[_], S]] will have to be adjusted to [F[_]: Monad: Stateful[?[_], S]]
The root cause for this is addressed in the motivation section.
Ask / Local
MonadReader from cats has been split into Ask and Local;
the Monad constraint has been weakened to Applicative, and the local method was split out
into a subclass to widen the implementation space for Ask.
Tell / Listen
Similarly to MonadReader, MonadWriter was split into Tell and Listen
and the constraint weakened to Functor, and Listen being Tell with the listen
method added.