<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <div class="moz-cite-prefix">This piece of reasoning, if endorsed by
      the libraries team, should be recorded somewhere else than just
      email.  Although I am not a fan of language-design-by-history, the
      chain of events is at least extremely clear and rather defensible.<br>
      <br>
      Jacques<br>
      <br>
      On 2017-08-08 12:30 PM, Edward Kmett wrote:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAJumaK9N8gBW6DfKt9K=CHeFObFfr1m-wn1MncgMN+zDvLTTHg@mail.gmail.com">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div dir="ltr">There was a great deal of monomorphization that
        went into the Haskell 98 standard under the nominal goal of
        trying to help newcomers to the language with simpler error
        messages. For more you can read old mailing list posts from that
        timeframe.
        <div><br>
        </div>
        <div>As a technical aside, (<>) is used for Monoid (and
          soon will upgrade to Semigroup) not MonadPlus, so the symbols
          have diverged in sentiment. Not only that, but (++) and
          (<>) get mixed in existing pretty printing code a good
          deal, and have different fixities, and must, lest a bunch of
          code silently change semantics. This was one reason why
          (<>) was added (to match existing practice in the pretty
          printing libraries) rather than generalizing (++).</div>
        <div><br>
        </div>
        <div>
          <div>Once we've added (<>), generalizing (++) becomes
            less urgent and actually has some cons. Notably, there is a
            subset of the community that finds the current form of map
            and (++) potentially useful for teaching about lists. If
            they generalized to become fmap and (<|>) or
            (<>) then we create a redundant notation for an
            existing thing, with no roadmap for replacing one with the
            other, and lose the teaching tool.<br>
          </div>
        </div>
        <div><br>
        </div>
        <div>
          <div>As a general guideline, the core libraries committee has
            been trying to avoid introducing redundant names that have
            the exact same type signature, with possibly different
            fixity, but where one is exported from the class and the
            other isn't, because it makes it yet another detail you have
            to memorize to know which one is the one in the class and
            can be refined: the types simply don't tell you.</div>
          <div><br>
          </div>
          <div>Having one version that is strictly more general enables
            one subset of the community to simply forget about the other
            one and move on, and another subset that aren't fans of
            rampant abstraction to use the one with more specific type
            when they want to clearly signal intent.</div>
          <div><br>
          </div>
          <div>I'd be slightly more open to discussions about eventual
            removal or exile of the redundant members to an appropriate
            module than generalization under that guideline, but that
            isn't a hill I'd want to die on. (++) is pretty well
            embedded in Haskell's DNA.<br>
          </div>
        </div>
        <div><br>
        </div>
        <div><b>tl;dr</b> It happened at first because of a great wave
          of monomorphization, and there is at least a defensible reason
          why it hasn't generalized back in the presence of other
          changes that have happened in the meantime.</div>
        <div><br>
        </div>
        <div>-Edward</div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">On Mon, Jul 3, 2017 at 1:29 PM, Doug
          McIlroy <span dir="ltr"><<a
              href="mailto:doug@cs.dartmouth.edu" target="_blank"
              moz-do-not-send="true">doug@cs.dartmouth.edu</a>></span>
          wrote:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex"><span
              class="">> What do you think of making (++) the same as
              (<>)<br>
              <br>
            </span>This seems to be a call for returning to the old
            situation in<br>
            which (++) was an operator of class MonadPlus. Why was that<br>
            abolished in Haskell 98?<br>
            <div class="HOEnZb">
              <div class="h5"><br>
                Doug<br>
                ______________________________<wbr>_________________<br>
                Haskell-Cafe mailing list<br>
                To (un)subscribe, modify options or view archives go to:<br>
                <a
                  href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe"
                  rel="noreferrer" target="_blank"
                  moz-do-not-send="true">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br>
                Only members subscribed via the mailman list are allowed
                to post.</div>
            </div>
          </blockquote>
        </div>
        <br>
      </div>
      <br>
      <fieldset class="mimeAttachmentHeader"></fieldset>
      <br>
      <pre wrap="">_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
<a class="moz-txt-link-freetext" href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a>
Only members subscribed via the mailman list are allowed to post.</pre>
    </blockquote>
    <p><br>
    </p>
  </body>
</html>