<span class="Apple-style-span" style="border-collapse: collapse; "><span style="font-size: small; ">This is one of the shortcomings of haskell not to mention other programming languages. Mathemathicist would find it very annoying.</span><div>
<span style="font-size: small; "><br></span></div><div><span style="font-size: small; ">Instead of&nbsp;</span></div><div><span style="font-size: small; "><br></span></div><div><span style="font-family: Georgia; "><pre style="white-space: pre-wrap; word-wrap: break-word; ">
<span style="font-size: small; "><span style="font-style: italic; ">instance Monoid Integer where<br>    mappend = (+)<br>    mempty = 0</span></span></pre><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-family: Georgia; white-space: normal; "><pre style="white-space: pre-wrap; word-wrap: break-word; ">
<span style="font-size: small; "><span style="font-style: italic; ">instance Monoid Integer where<br>    mappend = (*)<br>    mempty = 1</span></span></pre><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-size: small; "><br>
</span></pre><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-size: small; ">which is not legal and the workaround</span></pre><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-family: Georgia; white-space: normal; "><pre style="white-space: pre-wrap; word-wrap: break-word; ">
<span style="font-size: small; "><span style="font-style: italic; ">Num a =&gt; Monoid (Sum a)</span></span></pre><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-size: small; "><span style="font-style: italic; ">Num a =&gt; Monoid (Product a)</span></span></pre>
</span></pre></span></pre><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-size: small; ">wich is cumbersome</span></pre><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-size: small; ">A mathematician  would say something like:</span></pre>
<pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-family: Georgia; white-space: normal; "><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-size: small; "><span style="font-style: italic; ">instance Monoid Integer with operation + where
    mappend = (+)<br>    mempty = 0</span></span></pre><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-size: small; "><span style="font-style: italic; ">and</span></span></pre><pre style="white-space: pre-wrap; word-wrap: break-word; ">
<span style="font-family: Georgia; white-space: normal; "><pre style="white-space: pre-wrap; word-wrap: break-word; "><span style="font-size: small; "><span style="font-style: italic; ">instance Monoid Integer with operation * where<br>
    mappend = (*)<br>    mempty = 1</span></span></pre></span></pre></span></pre></span><div><br></div><div>But talking about shortcomings, personally I prefer to implement first a form of assertion that permits the checking of the &nbsp;class properties automatically for each new instance.&nbsp;</div>
<div>&nbsp;</div><div>This is far more important in práctical terms.</div><div><br></div></div></span><br><div class="gmail_quote">2009/1/19 Thomas DuBuisson <span dir="ltr">&lt;<a href="mailto:thomas.dubuisson@gmail.com">thomas.dubuisson@gmail.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="Ih2E3d">2009/1/19 Luke Palmer &lt;<a href="mailto:lrpalmer@gmail.com">lrpalmer@gmail.com</a>&gt;:<br>
</div><div><div></div><div class="Wj3C7c">&gt; On Mon, Jan 19, 2009 at 3:58 AM, Patai Gergely &lt;<a href="mailto:patai_gergely@fastmail.fm">patai_gergely@fastmail.fm</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; However, there are other type classes that are too general to assign<br>
&gt;&gt; such concrete uses to. For instance, if a data structure can have more<br>
&gt;&gt; than one meaningful (and useful) Functor or Monoid instance,<br>
&gt;<br>
&gt; As a side curiosity, I would love to see an example of any data structure<br>
&gt; which has more than one Functor instance. &nbsp;Especially those which have more<br>
&gt; than one useful functor instance.<br>
&gt; Luke<br>
<br>
</div></div>The recent, and great, blog post about moniods [1] discusses the fact<br>
that (Num a) could be one of several different monoids and how that<br>
was handled.<br>
<br>
[1] <a href="http://sigfpe.blogspot.com/2009/01/haskell-monoids-and-their-uses.html" target="_blank">http://sigfpe.blogspot.com/2009/01/haskell-monoids-and-their-uses.html</a><br>
<div><div></div><div class="Wj3C7c">_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">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>
</div></div></blockquote></div><br>