<pre><span class="keyword">Is there a reason why the lift function in ReaderT&#39;s MonadTrans instance is implemented as:<br><br></span><span class="keyword">instance</span> <span class="conid">MonadTrans</span> <span class="layout">(</span><span class="conid">ReaderT</span> <span class="varid">r</span><span class="layout">)</span> <span class="keyword">where</span><br>
<a name="line-162"></a>    <span class="varid">lift</span> <span class="varid">m</span> <span class="keyglyph">=</span> <span class="conid">ReaderT</span> <span class="varop">$</span> <span class="keyglyph">\</span><span class="keyword">_</span> <span class="keyglyph">-&gt;</span> <span class="varid">m</span><br>
<br><br>Instead of just using the monad&#39;s return function?     Could  &quot;lift m&quot; be implemented as &quot;return m&quot;?<br><br><span class="keyword"><br>instance</span> <span class="layout">(</span><span class="conid">Monad</span> <span class="varid">m</span><span class="layout">)</span> <span class="keyglyph">=&gt;</span> <span class="conid">Monad</span> <span class="layout">(</span><span class="conid">ReaderT</span> <span class="varid">r</span> <span class="varid">m</span><span class="layout">)</span> <span class="keyword">where</span><br>
<a name="line-141"></a>   <b> <span class="varid">return</span> <span class="varid">a</span> <span class="keyglyph">=</span> <span class="conid">ReaderT</span> <span class="varop">$</span> <span class="keyglyph">\</span><span class="keyword">_</span> <span class="keyglyph">-&gt;</span> <span class="varid">return</span> <span class="varid">a</span></b><br>
<a name="line-142"></a>    <span class="varid">m</span> <span class="varop">&gt;&gt;=</span> <span class="varid">k</span>  <span class="keyglyph">=</span> <span class="conid">ReaderT</span> <span class="varop">$</span> <span class="keyglyph">\</span><span class="varid">r</span> <span class="keyglyph">-&gt;</span> <span class="keyword">do</span><br>
<a name="line-143"></a>        <span class="varid">a</span> <span class="keyglyph">&lt;-</span> <span class="varid">runReaderT</span> <span class="varid">m</span> <span class="varid">r</span><br><a name="line-144"></a>        <span class="varid">runReaderT</span> <span class="layout">(</span><span class="varid">k</span> <span class="varid">a</span><span class="layout">)</span> <span class="varid">r</span><br>
<a name="line-145"></a>    <span class="varid">fail</span> <span class="varid">msg</span> <span class="keyglyph">=</span> <span class="conid">ReaderT</span> <span class="varop">$</span> <span class="keyglyph">\</span><span class="keyword">_</span> <span class="keyglyph">-&gt;</span> <span class="varid">fail</span> <span class="varid">msg</span><br>
<a name="line-146"></a><br><br>Thanks,<br><br>Daryoush<br><br><br><br><span class="keyword"></span><br></pre><br>