Just out of curiosity, why do you (and many others I&#39;ve seen with similar proposals) talk about additive monoids? are they somehow fundamentally different from multiplicative monoids? Or is it just a matter of notation? When I was playing with building an algebraic hierarchy, I picked a &quot;neutral&quot; operator for my monoids (I actually started at magma, but it&#39;s the same thing) and then introduced the addition and multiplication distinction at semirings, as it seemed pointless to distinguish them until you have a notion of a distributive law between the two.<div>
<br></div><div><br><br><div class="gmail_quote">On Fri, Oct 22, 2010 at 9:11 PM, wren ng thornton <span dir="ltr">&lt;<a href="mailto:wren@freegeek.org">wren@freegeek.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div class="im">On 10/22/10 8:46 AM, Alexey Khudyakov wrote:<br>
</div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">
Hello everyone!<br>
<br>
It&#39;s well known that Num &amp; Co type classes are not adequate for vectors<br>
(I don&#39;t mean arrays). I have an idea how to address this problem.<br>
<br>
Conal Elliott wrote very nice set of type classes for vectors.<br>
(Definition below). I used them for some time and quite pleased. Code is<br>
concise and readable.<br>
<br>
 &gt; class AdditiveGroup v where<br>
 &gt; zeroV :: v<br>
 &gt; (^+^) :: v -&gt; v -&gt; v<br>
 &gt; negateV :: v -&gt; v<br></div>
[...]<div class="im"><br>
I&#39;d like to know opinion of haskellers on this and specifically opinion<br>
of Conal Eliott as author and maintainer (I CC&#39;ed him)<br>
</div></blockquote>
<br>
Just my standard complaint: lack of support for semirings, modules, and other simple/general structures. How come everyone&#39;s in such a hurry to run off towards Euclidean spaces et al.?<br>
<br>
I&#39;d rather see,<br>
<br>
    class Additive v where -- or AdditiveMonoid, if preferred<div class="im"><br>
        zeroV :: v<br>
        (^+^) :: v -&gt; v -&gt; v<br>
<br></div>
    class Additive v =&gt; AdditiveGroup v where<br>
        negateV :: v -&gt; v<br>
<br>
    type family Scalar :: * -&gt; *<br>
<br>
    class Additive v =&gt; LeftModule v where<br>
        (*^) :: Scalar v -&gt; v -&gt; v<br>
<br>
    class Additive v =&gt; RightModule v where<br>
        (^*) :: v -&gt; Scalar v -&gt; v<br>
<br>
    ...<br>
<br>
Though I don&#39;t know how much that&#39;d affect the niceness properties you mentioned.<br>
<br>
-- <br>
Live well,<br><font color="#888888">
~wren</font><div><div></div><div class="h5"><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>
</div></div></blockquote></div><br></div>