Hi Michael,<br><br>      Let me look tomorrow morning. In any case, many thanks!<br><br>Kind regards,<br><br>Vasili<br><br><div class="gmail_quote">On Tue, Jun 2, 2009 at 11:12 PM, Michael Snoyman <span dir="ltr">&lt;<a href="mailto:michael@snoyman.com">michael@snoyman.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div dir="ltr"><div class="im">&gt; remLookupFwd :: (ReVars m t) =&gt; SimplRe t -&gt; ReM m t (ReInfo t)<br>

&gt; remLookupFwd re<br>
&gt;   = do fwd &lt;- gets resFwdMap<br>
&gt; --       let { Just reinfo = M.lookup fwd re }                    -- PROBLEM<br></div>
&gt;        reinfo &lt;- liftMaybe $ M.lookup re fwd                      -- PROBLEM<br>
&gt;        return reinfo<br>
&gt;<br>
&gt; liftMaybe :: Monad m =&gt; Maybe a -&gt; m a<br>
&gt; liftMaybe Nothing = fail &quot;Nothing&quot;<br>
&gt; liftMaybe (Just x) = return x<br>
<br>I made two changes:<br>
<br>
1. You had the arguments to M.lookup backwards.<br>
2. lookup does not return any generalized Monad, just Maybe (I think that should be changed). I added the simple liftMaybe function to convert the Maybe result into something that will work with your state monad.<br><br>

Michael<br></div>
</blockquote></div><br>