<div dir="ltr">Hmm, I'm still having trouble implementing local for the MonadReader instance of M.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Oct 31, 2013 at 11:59 AM, Nickolay Kudasov <span dir="ltr"><<a href="mailto:nickolay.kudasov@gmail.com" target="_blank">nickolay.kudasov@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:courier new,monospace"></div><div><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 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-wrap;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 style="color:rgb(153,0,0);font-weight:bold">push'</span> :: <span>MonadReader</span> [<span>String</span>] m => <span>String</span> -> m a -> m a
<span 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><div class="h5"><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></div></div>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">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>
</blockquote></div><br></div>