How to call partially un-nest transformers?
<p><strong>Given a nesting of transformers <code>:: T2 of T1 of M0</code>, how can I utilize <code>:: T2 of M0</code>, <code>:: M2</code> ?</strong></p>

<p>Here's an example: I am writing some function which requires reading, logging, and state. The definition:</p>

<pre><code>gameRoutine :: WriterT [String] (ReaderT Env (State Viable)) NUM
</code></pre>

<p>If I want to call some
 <code>stateFunction :: State Viable NUM</code></p>

<p>Or even <code>stateWithReaderFunction :: ReaderT Env (State Viable) NUM</code>,</p>

<p>I can use <code>lift</code>:</p>

<pre><code>gameRoutine = do
    x &lt;- lift . lift $ stateFunction
    y &lt;- lift $ stateWithReaderFunction
</code></pre>

<p>But how do I call <code>writerFunction :: Writer [String] a</code> ?</p>

<p>How do I call <code>writerStateFunction :: WriterT [String] (State Viable) NUM</code> (the difference between <code>gameRoutine</code> definition is <code>ReaderT</code> layer missing)?</p>

<p>Clearly I don't want to lift their definitions to one of <code>gameRoutine</code>.</p>