<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">I didn't know I could do that. Works fine. Output below. Thanks!<br><br>This is some pretty neat stuff, and I've only scratched the surface.<br><br>Michael<br><br>===================<br><br>[michael@localhost ~]$ ghci<br>GHCi, version 6.10.1: http://www.haskell.org/ghc/&nbsp; :? for help<br>Loading package ghc-prim ... linking ... done.<br>Loading package integer ... linking ... done.<br>Loading package base ... linking ... done.<br>Prelude&gt; :l graph5<br>[1 of 1] Compiling Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( graph5.hs, interpreted )<br><br>graph5.hs:37:9:<br>&nbsp;&nbsp;&nbsp; Warning: No explicit method nor default method for `mzero'<br>&nbsp;&nbsp;&nbsp; In the instance declaration for `MonadPlus Failable'<br>Ok, modules loaded: Main.<br>*Main&gt; let g = Graph [(1,'a'),(2,'b'),(3,'c'),(4,'d')]
 [(1,2,'p'),(2,3,'q'),(1,4,'r'),(4,3,'s')]<br>*Main&gt; searchAll g 1 3 :: Failable [Int]<br>Success [1,2,3]<br>*Main&gt; searchAll g 3 1 :: Failable [Int]<br>Fail "no path"<br>*Main&gt; searchAll g 1 3 :: Maybe [Int]<br>Just [1,2,3]<br>*Main&gt; searchAll g 3 1 :: Maybe [Int]<br>Nothing<br>*Main&gt; searchAll g 1 3 :: [[Int]]<br>[[1,2,3],[1,4,3]]<br>*Main&gt; searchAll g 3 1 :: [[Int]]<br>[]<br>*Main&gt; <br><br><br><br>--- On <b>Mon, 6/1/09, Ross Mellgren <i>&lt;rmm-haskell@z.odi.ac&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Ross Mellgren &lt;rmm-haskell@z.odi.ac&gt;<br>Subject: Re: [Haskell-cafe] Missing a "Deriving"?<br>To: "michael rice" &lt;nowgate@yahoo.com&gt;<br>Cc: "haskell-cafe Cafe" &lt;haskell-cafe@haskell.org&gt;<br>Date: Monday, June 1, 2009, 9:43 PM<br><br><div id="yiv1348363047">Oh I wasn't clear -- you need multiple instance declarations for a given
 type (Failable, for example), one for each type class you're implementing.<div><br></div><div>That is,&nbsp;</div><div><br></div><div>instance Monad Failable where</div><div>&nbsp;&nbsp; return = ...</div><div>&nbsp;&nbsp; ...</div><div><br></div><div><br></div><div>instance MonadPlus Failable where</div><div>&nbsp;&nbsp; mplus = ...</div><div>&nbsp;&nbsp; ...</div><div><br></div><div>-Ross</div><div><br></div><div><div><div>On Jun 1, 2009, at 9:40 PM, michael rice wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><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; -x-system-font: none;" valign="top">Hi Ross,<br><br>I thought of that, but return, fail, and &gt;&gt;= became "not visible" when I changed the instance declaration from
 Monad to MonadPlus.. Can Failable be in two instance declarations, one for Monad (giving it return, fail, and &gt;&gt;=) and one for MonadPlus (giving it mplus)?<br><br>Michael<br><br>--- On <b>Mon, 6/1/09, Ross Mellgren <i>&lt;<a rel="nofollow" ymailto="mailto:rmm-haskell@z.odi.ac" target="_blank" href="/mc/compose?to=rmm-haskell@z.odi.ac">rmm-haskell@z.odi.ac</a>&gt;</i></b> wrote:<br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><br>From: Ross Mellgren &lt;<a rel="nofollow" ymailto="mailto:rmm-haskell@z.odi.ac" target="_blank" href="/mc/compose?to=rmm-haskell@z.odi.ac">rmm-haskell@z.odi.ac</a>&gt;<br>Subject: Re: [Haskell-cafe] Missing a "Deriving"?<br>To: "michael rice" &lt;<a rel="nofollow" ymailto="mailto:nowgate@yahoo.com" target="_blank" href="/mc/compose?to=nowgate@yahoo.com">nowgate@yahoo.com</a>&gt;<br>Cc: "haskell-cafe Cafe" &lt;<a rel="nofollow" ymailto="mailto:haskell-cafe@haskell.org"
 target="_blank" href="/mc/compose?to=haskell-cafe@haskell.org">haskell-cafe@haskell.org</a>&gt;<br>Date: Monday, June 1, 2009, 9:33 PM<br><br><div id="yiv1714632642">mplus is a method of class MonadPlus, so you need to write it in a separate instance from the one for Monad, e.g.<div><br></div><div>instance MonadPlus Failable where</div><div>&nbsp;&nbsp; &nbsp;mplus = ...</div><div><br></div><div>-Ross</div><div><br></div><div><div><div><div>On Jun 1, 2009, at 9:28 PM, michael rice wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><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">Still stumped. Maybe and [] are in the same MonadPlus monad, but how do I make monad Failable understand mplus?<br><br>I'm now getting this
 error upon loading:<br><br><br>Prelude&gt; :l graph5<br>[1 of 1] Compiling Main&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ( graph5.hs, interpreted )<br><br>graph5.hs:36:4: `mplus' is not a (visible) method of class `Monad'<br>Failed, modules loaded: none.<br>Prelude&gt; <br><br><br><br><blockquote style="border-left: 2px solid rgb(16, 16, 255); margin-left: 5px; padding-left: 5px;"><div id="yiv778184410"><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">Complete code follows.<br><br>Michael<br><br>=========================<br><br>import Monad<br><br>data Failable a = Success a | Fail String deriving (Show)<br><br>data Graph v e = Graph [(Int,v)] [(Int,Int,e)]<br><br>{-<br>class Computation c
 where<br>&nbsp;&nbsp;&nbsp; success :: a -&gt; c a<br>&nbsp;&nbsp;&nbsp; failure :: String -&gt; c a<br>&nbsp;&nbsp;&nbsp; augment :: c a -&gt; (a -&gt; c b) -&gt; c b<br>&nbsp;&nbsp;&nbsp; combine :: c a -&gt; c a -&gt; c a<br><br>instance Computation Maybe where<br>&nbsp;&nbsp;&nbsp; success = Just<br>&nbsp;&nbsp;&nbsp; failure = const Nothing<br>&nbsp;&nbsp;&nbsp; augment (Just x) f = f x<br>&nbsp;&nbsp;&nbsp; augment Nothing _ = Nothing<br>&nbsp;&nbsp;&nbsp; combine Nothing y = y<br>&nbsp;&nbsp;&nbsp; combine x _ = x<br><br>instance Computation Failable where<br>&nbsp;&nbsp;&nbsp; success = Success<br>&nbsp;&nbsp;&nbsp; failure = Fail<br>&nbsp;&nbsp;&nbsp; augment (Success x) f = f x<br>&nbsp;&nbsp;&nbsp; augment (Fail s) _ = Fail s<br>&nbsp;&nbsp;&nbsp; combine (Fail _) y = y<br>&nbsp;&nbsp;&nbsp; combine x _ = x<br>-}<br><br>instance Monad Failable where<br>&nbsp;&nbsp;&nbsp; return = Success<br>&nbsp;&nbsp;&nbsp; fail = Fail<br>&nbsp;&nbsp;&nbsp;
 (&gt;&gt;=) (Success x) f = f x<br>&nbsp;&nbsp;&nbsp; (&gt;&gt;=) (Fail s) _ = Fail s<br>&nbsp;&nbsp;&nbsp; mplus (Fail _) y = y<br>&nbsp;&nbsp;&nbsp; mplus x _ = x<br><br>{-<br>instance Computation [] where<br>&nbsp;&nbsp;&nbsp; success a = [a]<br>&nbsp;&nbsp;&nbsp; failure = const []<br>&nbsp;&nbsp;&nbsp; augment l f = concat (map f l)<br>&nbsp;&nbsp;&nbsp; combine = (++)<br><br><br>searchAll g@(Graph vl el) src dst<br>&nbsp;&nbsp;&nbsp; | src == dst = success [src]<br>&nbsp;&nbsp;&nbsp; | otherwise = search' el<br>&nbsp;&nbsp;&nbsp; where search' [] = failure "no path"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; search' ((u,v,_):es)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | src == u = (searchAll g v dst `augment`<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; (success .
 (u:)))<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; `combine` search' es<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | otherwise = search' es<br>-}<br><br>searchAll g@(Graph vl el) src dst<br>&nbsp;&nbsp;&nbsp; | src == dst = return [src]<br>&nbsp;&nbsp;&nbsp; | otherwise = search' el<br>&nbsp;&nbsp;&nbsp; where search' [] = fail "no path"<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; search' ((u,v,_):es)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | src == u = (searchAll g v dst &gt;&gt;=<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; (return .
 (u:)))<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; `mplus` search' es<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | otherwise = search' es<br>&nbsp;</td></tr></tbody></table><br>       </div><br>-----Inline Attachment Follows-----<br><br><div class="plainMail">_______________________________________________<br>Haskell-Cafe mailing list<br><a rel="nofollow">Haskell-Cafe@haskell.org</a><br><a rel="nofollow" target="_blank" href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br></div></blockquote></td></tr></tbody></table><br>       _______________________________________________<br>Haskell-Cafe mailing list<br><a rel="nofollow">Haskell-Cafe@haskell.org</a><br><a rel="nofollow" target="_blank"
 href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br></blockquote></div><br></div></div></div></blockquote></td></tr></tbody></table><br>       </blockquote></div><br></div></div></blockquote></td></tr></table><br>