Hey Michael,<br><br>If you would look at the type of  &gt;&gt;=, it would give <br>(&gt;&gt;=) :: (Monad m) =&gt; m a -&gt; (a -&gt; m b) -&gt; m b<br><br>and specifically in your case:<br>(&gt;&gt;=) :: Maybe a -&gt; (a -&gt; Maybe b) -&gt; Maybe b<br>
<br>You are applying Just 3 as first argument, which is correct, but then supply a partially applied function (1+) which is of type Num  a =&gt; a -&gt; a, while it should be <br>a -&gt; Maybe b. <br><br>What are you expecting as result? You cannot pull something out of a monad using a bind operator. Maybe you meant something like this?<br>
(Just 3) &gt;&gt;= \x -&gt; return (x + 1) <br>Notice how Just 3 is just the Maybe a argument, and \x -&gt; return (x + 1) is the (a -&gt; Maybe b) argument, finally delivering a Just 4 (of type Maybe b).<br><br>(This is the same as do x &lt;- Just 3<br>
                                   return (x + 1)<br>)<br><br><br>Oh and btw, fail should take an argument (the error string). <br><br>Good luck,<br><br>Bas van Gijzel<br><br><div class="gmail_quote">On Sat, May 9, 2009 at 9:31 PM, michael rice <span dir="ltr">&lt;<a href="mailto:nowgate@yahoo.com" target="_blank">nowgate@yahoo.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;"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td style="font-family: inherit; font-style: inherit; font-variant: inherit; font-weight: inherit; font-size: inherit; line-height: inherit; font-size-adjust: inherit; font-stretch: inherit;" valign="top">

Why doesn&#39;t this work?<br><br>Michael<br><br>================<br><br>data Maybe a = Nothing | Just a<br><br>instance Monad Maybe where<br>    return         = Just<br>    fail           = Nothing<br>    Nothing  &gt;&gt;= f = Nothing<br>

    (Just x) &gt;&gt;= f = f x<br>    <br>instance MonadPlus Maybe where<br>    mzero             = Nothing<br>    Nothing `mplus` x = x<br>    x `mplus` _       = x<br><br>================<br><br>[michael@localhost ~]$ ghci<br>

GHCi, version 6.10.1: <a href="http://www.haskell.org/ghc/" target="_blank">http://www.haskell.org/ghc/</a>  :? for help<br>Loading package ghc-prim ...
 linking ... done.<br>Loading package integer ... linking ... done.<br>Loading package base ... linking ... done.<br>Prelude&gt; Just 3 &gt;&gt;= (1+)<br><br>&lt;interactive&gt;:1:0:<br>    No instance for (Num (Maybe b))<br>

      arising from a use of `it&#39; at &lt;interactive&gt;:1:0-14<br>    Possible fix: add an instance declaration for (Num (Maybe b))<br>    In the first argument of `print&#39;, namely `it&#39;<br>    In a stmt of a &#39;do&#39; expression: print it<br>

Prelude&gt; <br><br></td></tr></tbody></table><br>

      <br>_______________________________________________<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>