<div dir="ltr"><div class="gmail_default" style="font-family:courier new,monospace"></div><div class="markdown-here-wrapper" id="markdown-here-wrapper-452483" style><p style="margin:1.2em 0px!important">Hi David,</p>
<p style="margin:1.2em 0px!important">I believe the easiest way to do what you want is to use <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline">MonadReader</code> class instead of explicit <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline">t (Reader [String] a)</code>:</p>

<pre style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;font-size:1em;line-height:1.2em;margin:1.2em 0px"><code class="language-haskell" style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;display:inline;white-space:pre;overflow:auto;border-top-left-radius:3px;border-top-right-radius:3px;border-bottom-right-radius:3px;border-bottom-left-radius:3px;border:1px solid rgb(204,204,204);padding:0.5em 0.7em;display:block;padding:0.5em;color:rgb(51,51,51);background-color:rgb(248,248,255);background-repeat:initial initial"><span class="title" style="color:rgb(153,0,0);font-weight:bold">push'</span> :: <span class="type">MonadReader</span> [<span class="type">String</span>] m => <span class="type">String</span> -> m a -> m a
<span class="title" style="color:rgb(153,0,0);font-weight:bold">push'</span> s = local (s:)</code></pre>
<p style="margin:1.2em 0px!important">Best,<br>Nick</p>
</div><div class="gmail_default" style="font-family:courier new,monospace"></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/31 David Fox <span dir="ltr"><<a href="mailto:dsf@seereason.com" target="_blank">dsf@seereason.com</a>></span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">I can write a stack push function in the reader monad like so:<div><br></div><div><div>    import Control.Monad.Reader</div>
<div><br></div><div>    push :: String -> Reader [String] a ->  Reader [String] a</div>
<div>    push s action = local (s :) action</div><div><br></div><div>How can I write a push that works inside a monad transformer?</div><div><br></div><div>    push' :: MonadTrans t => String -> t (Reader [String]) a ->  t (Reader [String]) a</div>

<div>    push' s action = ???</div><div><br></div></div></div>
<br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
<br></blockquote></div><br></div>