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.