<br><br>
<div class="gmail_quote">On Fri, Nov 13, 2009 at 1:10 PM, Stephen Tetley <span dir="ltr">&lt;<a href="mailto:stephen.tetley@gmail.com">stephen.tetley@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div class="im">&gt; Magicloud Magiclouds &lt;<a href="mailto:magicloud.magiclouds@gmail.com">magicloud.magiclouds@gmail.com</a>&gt; wrote:<br><br></div>
<div class="im">&gt;&gt; That is OK. Since understand the basic concept of monoid (I mean the<br>&gt;&gt; thing in actual math), the idea here is totally not hard for me. But<br>&gt;&gt; the sample here does not show why (or how) we use it in programming,<br>
&gt;&gt; right?<br><br></div>Hi Magicloud<br><br>Conal Elliott has an interesting paper about designing your programs<br>in relation to the standard type classes:.<br><br><a href="http://conal.net/papers/type-class-morphisms/" target="_blank">http://conal.net/papers/type-class-morphisms/</a><br>
<br>Thinking about the data structures and functions in your program with<br>regards the standard classes is very useful useful for clarifying your<br>design. And certainly if you decide your data structure fits the<br>Monoid interface then you will be presenting it to others who use your<br>
program in the &#39;standard vocabulary&#39;. But even for Monoid which<br>seemingly presents a simple interface (mempty, mappend) deciding<br>whether the _container_ you have is naturally a monoid can be<br>difficult.<br>
<br>A personal example, I&#39;ve been developing a drawing library for a<br>couple of months and still can&#39;t decide whether a bounding box should<br>be a monoid (mempty, append) or a groupoid (just append) where append<br>
in both cases is union. Even though I haven&#39;t resolved this problem,<br>having the framework of monoid versus groupoid at least gives me the<br>_terminology_ to consider the problem.<br></blockquote>
<div> </div>
<div> </div>
<div>Watch out, in more common parlance, having just an binary operation is a magma, while having a category with full inverses yields a groupoid. I haven&#39;t seen many people use the older groupoid term for magmas, if only because they started to have naming conflicts with the category theory people, and Bourbaki&#39;s &#39;magma&#39; was available and unambiguous. =) </div>

<div> </div>
<div>And of course magma is not to be confused with the notion of a semigroup, which is a binary associative operation, and is therefore much more similar to a monoid in that all it lacks is a unit.</div>
<div> </div>
<div>-Edward Kmett</div>
<div> </div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid"><br>Best wishes<br><font color="#888888"><br>Stephen<br></font>
<div>
<div></div>
<div class="h5">_______________________________________________<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>