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.