<p>I think you&#39;ll find a problem using do-notation with your Monad.</p>
<p>Tony Morris</p>
<p><blockquote type="cite">On 04/01/2011 11:33 PM, &quot;Alexey Khudyakov&quot; &lt;<a href="mailto:alexey.skladnoy@gmail.com">alexey.skladnoy@gmail.com</a>&gt; wrote:<br><br><p><font color="#500050">On 04.01.2011 13:24, <a href="mailto:oleg@okmij.org">oleg@okmij.org</a> wrote:<br>
&gt;<br>&gt;<br>&gt; I&#39;d like to argue in opposition of making Functor a...</font></p>
I think I understood your point. But it looks like that it&#39;s possible to use subclass&#39;s function in superclass instance. At very least GHC is able to do it.<br>
<br>
Following example works just fine without any language extensions in GHC6.12.3<br>
<br>
<br>
import Prelude hiding (Monad(..), Functor(..))<br>
<br>
class Functor f where<br>
  fmap :: (a -&gt; b) -&gt; f a -&gt; f b<p><font color="#500050"><br><br>class Functor m =&gt; Monad m where<br> return :: a -&gt; m a<br> (&gt;&gt;=) :: m a -&gt; (a -&gt; m b) -&gt; m b<br></font></p>
instance Functor Maybe where<p><font color="#500050"><br> fmap f m = m &gt;&gt;= (return . f)</font></p>
instance Monad Maybe where<br>
  return = Just<br>
  Nothing &gt;&gt;= _ = Nothing<br>
  Just x  &gt;&gt;= f = f x<p><font color="#500050"><br><br>_______________________________________________<br>Haskell-prime mailing list<br>Haskell-prime@haskell.o...</font></p></blockquote></p>