On Fri, Nov 16, 2012 at 3:06 PM, Herbert Valerio Riedel <span dir="ltr">&lt;<a href="mailto:hvr@gnu.org" target="_blank">hvr@gnu.org</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Edward A Kmett &lt;<a href="mailto:ekmett@gmail.com">ekmett@gmail.com</a>&gt; writes:<br>
<br>
[...]<br>
<br>
&gt; Sadly, I&#39;ve mostly given up on even convincing folks to refactor<br>
&gt; Monoid to pull out Semigroup which I view pragmatically as a<br>
&gt; prerequisite to including something like Apply or Bind in a serious<br>
&gt; hierarchy reform proposal.<br>
&gt;<br>
&gt; When someone raised adding Semigroup during the (&lt;&gt;) = mappend<br>
&gt; proposal the idea was quickly derided and dismissed.<br>
<br>
btw, I didn&#39;t have the impression that it was &quot;derided&quot; but the issue<br>
seemed to be (iirc -- please correct me if I got it wrong) that adding<br>
&#39;Semigroup&#39; as a separate typeclass would break code, as it would<br>
require to replace occurences of the constraint &#39;Monoid a =&gt;&#39; to<br>
&#39;(Monoid a, Semigroup a) =&gt;&#39;, and for some reason I don&#39;t recall right<br>
now making Semigroup a superclass of Monoid wasn&#39;t an option either.<br>
<br>
IMHO, if we have a Monoid class in the standard/base libraries, we<br>
should have a Semigroup class as well there sooner or later..<br></blockquote><div><br></div><div>This comes up once every so often (typically in discussion about Functor, Applicative, and Monad). I don&#39;t want to rehash the arguments here (they are in the archives). Adding new superclasses breaks a lot of code for little gain for most people. We need a technical solution to this problem first, before we can refactor our type hierarchy.</div>

<div><br></div><div>-- Johan</div><div><br></div></div>