title: How is Kleisli a monad Transformer?
body: <p>Some definition of Monad Transformers in cats.</p>
  <blockquote>
  <p>EitherT[F[_], A, B] is a lightweight wrapper for F[Either[A, B]] that
  makes it easy to compose Eithers and Fs together. To use EitherT,
  values of Either, F, A, and B are first converted into EitherT, and
  the resulting EitherT values are then composed using combinators.</p>
  </blockquote>
  <blockquote>
  <p>OptionT[F[_], A] is a light wrapper on an F[Option[A]]. Speaking
  technically, it is a monad transformer for Option, but you don’t need
  to know what that means for it to be useful. OptionT can be more
  convenient to work with than using F[Option[A]] directly.</p>
  </blockquote>
  <p>I understand the concept, even saw some interesting talk about it: <a href="https://www.youtube.com/watch?v=jd5e71nFEZM&amp;t=0s" rel="nofollow noreferrer">Monad transformers down to earth by Gabriele Petronella</a></p>
  <p>I understand the Reader Monad, and how Kleisli is just a generalization.</p>
  <p>What i do not understand is the statement bellow, that says that it is a monad transformer. What are we stacking exactly ? I don't see 2 monad being stacked here ....</p>
  <blockquote>
  <p>Kleisli can be viewed as the monad transformer for functions. Recall
  that at its essence, Kleisli[F, A, B] is just a function A =&gt; F[B],
  with niceties to make working with the value we actually care about,
  the B, easy. Kleisli allows us to take the effects of functions and
  have them play nice with the effects of any other F[_].</p>
  </blockquote>
  <p>Any thoughts ?</p>