title: Do monad transformers, generally speaking, arise out of adjunctions?
body: <p>In <a href="https://stackoverflow.com/q/49322276/2751851"><em>Adjoint functors determine monad transformers, but where's lift?</em></a>, Simon C has shown us the construction...</p>
  
  <pre><code>newtype Three u f m a = Three { getThree :: u (m (f a)) }
  </code></pre>
  
  <p>... which, as the answers there discuss, can be given an <code>instance Adjunction f u =&gt; MonadTrans (Three u f)</code> (<em>adjunctions</em> provides it as <a href="http://hackage.haskell.org/package/adjunctions-4.4/docs/Control-Monad-Trans-Adjoint.html" rel="noreferrer"><code>AdjointT</code></a>). Any Hask/Hask adjunction thus leads to a monad transformer; in particular, <code>StateT s</code> arises in this manner from the currying adjunction between <code>(,) s</code> and <code>(-&gt;) s</code>.</p>
  
  <p>My follow-up question is: does this construction generalise to other monad transformers? Is there a way to derive, say, the other transformers from the <em>transformers</em> package from suitable adjunctions?</p>
  
  <hr>
  
  <p>Meta remarks: my answer here was originally written for Simon C's question. I opted to spin it off into a self-answered question because, upon rereading that question, I noticed my purported answer had more to do with the discussion in the comments over there than with the question body itself. Two other closely related questions, to which this Q&amp;A arguably is also a follow-up, are <a href="https://stackoverflow.com/q/24515876/2751851"><em>Is there a monad that doesn't have a corresponding monad transformer (except IO)?</em></a> and <a href="https://stackoverflow.com/q/42284879/2751851"><em>Is the composition of an arbitrary monad with a traversable always a monad?</em></a></p>