<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Ok, changed the last line and deleted the bad line. Maybe someone could recommend a better example?<br><br>Michael<br><br>=============<br><br>Prelude&gt; :l test5<br>[1 of 1] Compiling Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( test5.hs, interpreted )<br><br>test5.hs:16:4:<br>&nbsp;&nbsp;&nbsp; Occurs check: cannot construct the infinite type: a = Maybe a<br>&nbsp;&nbsp;&nbsp; When generalising the type(s) for `mplus'<br>&nbsp;&nbsp;&nbsp; In the instance declaration for `MonadPlus (MaybeT m)'<br>Failed, modules loaded: none.<br><br><br><br>--- On <b>Sun, 12/26/10, David Menendez <i>&lt;dave@zednenem.com&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: David Menendez &lt;dave@zednenem.com&gt;<br>Subject: Re: [Haskell-cafe] Intro to monad
 transformers<br>To: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Cc: haskell-cafe@haskell.org<br>Date: Sunday, December 26, 2010, 2:30 PM<br><br><div id="yiv38433969">On Sun, Dec 26, 2010 at 2:00 PM, michael rice <span dir="ltr">&lt;<a rel="nofollow" ymailto="mailto:nowgate@yahoo.com" target="_blank" href="/mc/compose?to=nowgate@yahoo.com">nowgate@yahoo.com</a>&gt;</span> wrote:&nbsp;<div class="yiv38433969gmail_quote"><blockquote class="yiv38433969gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font: inherit;" valign="top">instance Monad m =&gt; MonadPlus (MaybeT m) where<br>&nbsp;&nbsp;&nbsp; mzero&nbsp;&nbsp;&nbsp;&nbsp; = MaybeT $ return Nothing<br>&nbsp;&nbsp;&nbsp; mplus x y = MaybeT $ do maybe_value &lt;- runMaybeT x<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case maybe_value
 of<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Nothing&nbsp;&nbsp;&nbsp; -&gt; runMaybeT y<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Just value -&gt; runMaybeT x<br></td></tr></tbody></table></blockquote><div><br></div><div>The last line is wrong. It should be, "Just value -&gt; return value". But that doesn't cause the problem.</div>
<div>&nbsp;</div><blockquote class="yiv38433969gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font: inherit;" valign="top">instance Show (MaybeT m a)<br>
</td></tr></tbody></table></blockquote><div><br></div><div>This is never valid. You've defined show, shows, and showsPrec in terms of each other, creating unbounded recursion. Delete it.</div><div>&nbsp;</div><blockquote class="yiv38433969gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font: inherit;" valign="top">*Main&gt; askPassword<br>Loading package transformers-0.2.2.0 ... linking ... done.<br>*** Exception: stack overflow<br></td>
</tr></tbody></table></blockquote><div><br></div><div>This triggers the unbounded recursion, when it tries to show askPassword. Note that there is no way to show IO values, so there's no way to show MaybeT IO values.</div>
<div><br></div><div>Instead, use runMaybeT askPassword</div></div><br>-- <br>Dave Menendez &lt;<a rel="nofollow" ymailto="mailto:dave@zednenem.com" target="_blank" href="/mc/compose?to=dave@zednenem.com">dave@zednenem.com</a>&gt;<br>&lt;<a rel="nofollow" target="_blank" href="http://www.eyrie.org/%7Ezednenem/">http://www.eyrie.org/~zednenem/</a>&gt;<br>

</div></blockquote></td></tr></table><br>