MTL classes summary
Tell[F, L] is the ability to "log" values L inside a context F[_], as an effect.
The primary monad transformer instance for Tell is WriterT.
Listen[F, L] extends Tell and gives you the ability to expose the state
that is contained in all F[A] values, and that can be modified using tell.
In that sense it is equivalent to a function F[A] => F[(A, L)].
The primary monad transformer instance for Listen is WriterT.
Ask[F, E] lets you access an E value in the F[_] context.
Intuitively, this means that an E value is required as an input to get "out" of the F[_] context.
The primary monad transformer instance for Ask is ReaderT.
Local[F, E] extends Ask and lets you substitute all of the ask occurrences in an F[A] value with
ask.map(f), for some f: E => E which produces a modified E input.
The primary monad transformer instance for Local is ReaderT.
Stateful[F, S] is the capability to access and modify a state value
from inside the F[_] context, using set(s: S): F[Unit] and get: F[S].
The primary monad transformer instance for Stateful is StateT.
Chronicle[F, E] is the ability to both accumulate outputs and aborting computation with a final output.
In that sense it can be seen as a hybrid of Handle and Tell.
The primary monad transformer instance for Chronicle is IorT.
Raise[F, E] expresses the ability to raise errors of type E in a functorial F[_] context.
This means that a value of type F[A] may contain no A values but instead an E error value,
and further map calls will not have any values to execute the passed function on.
The primary monad transformer instance for Raise is EitherT.
Handle[F, E] extends Raise with the ability to also handle raised errors.
It is fully equivalent to cats.ApplicativeError, but is not a subtype of Applicative and therefore doesn't cause any ambiguitites.
The primary monad transformer instance for Handle is EitherT.