You could, but then you need overlapping instances to define the one in Control.Monad.Error.<div><div><br></div><div>-Edward Kmett<br><div><br><div class="gmail_quote">On Sat, Sep 12, 2009 at 4:26 PM, Henning Thielemann <span dir="ltr">&lt;<a href="mailto:lemming@henning-thielemann.de">lemming@henning-thielemann.de</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Evan Laforge schrieb:<br>
<div class="im">&gt; On Fri, Sep 11, 2009 at 6:10 AM, Edward Kmett &lt;<a href="mailto:ekmett@gmail.com">ekmett@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Unfortunately, the instance of Monad for Either a is somewhat misguided in<br>
&gt;&gt; Haskell.<br>
&gt;&gt;<br>
&gt;&gt; There is a spurious restraint that the Left value in your Either be a member<br>
&gt;&gt; of some Error class, which was brought about by the deletion of MonadZero<br>
&gt;&gt; from Haskell 98 (as part of the elimination of failure free patterns, and an<br>
&gt;&gt; attempted simplification of the language).<br>
&gt;<br>
&gt; I just tried it, and my own instance for Monad (Either String) (all<br>
&gt; I&#39;m really interested in anyway) can coexist with the one for Error e<br>
&gt; =&gt; Monad (Either e).  But indeed, with the presence of fail, you can&#39;t<br>
&gt; write the general Monad (Either e) which &quot;should&quot; work.  And it does<br>
&gt; require FlexibleInstances.  I suppose as long as flexible instances<br>
&gt; aren&#39;t standard then even the String instance can&#39;t go in the Prelude.<br>
<br>
</div>Are you sure, that the instance cannot be defined in Haskell 98 using a<br>
helper type class for the Char datatype?<br>
  <a href="http://www.haskell.org/haskellwiki/List_instance" target="_blank">http://www.haskell.org/haskellwiki/List_instance</a><br>
<br>
</blockquote></div><br></div></div></div>