<div dir="auto">This sounds good to me. Having (/=) be a method has always seemed like a bit of a wart, since it's hard to imagine either a reason to define it explicitly or a reason to want it in a dictionary.</div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Oct 20, 2021, 10:40 AM Joachim Breitner <<a href="mailto:mail@joachim-breitner.de">mail@joachim-breitner.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi list,<br>
<br>
I am revisiting some educational material about Haskell, and I stumble<br>
over something that I keep stumbling over. I thought there was prior<br>
discussion, but I couldn’t find it (operators hard hard to google for).<br>
<br>
Why does Eq have a (/=) method?<br>
<br>
Semantically, I don’t see a reason why an instance might want to behave<br>
differently than the default method. And (in contrast to, say, Ord), I<br>
would be surprised if there are noticable performance benefits to be<br>
gained from implementing (/=) separately.<br>
<br>
On the other hand, this is likely the first time a learner will<br>
encounter a class with default methods, and it’s awkward to explain<br>
“this mechanism is useful if you can have an optimized implementation,<br>
but, eh, here it isn’t really possible”.<br>
<br>
If we’d design the language now, would we include (/=) as a method?<br>
<br>
<br>
If no: would it be worth removing it?<br>
<br>
Yes, every change is annoying, but if are going to keep using Haskell<br>
the next 30 days, it may pay off? And it might not be too bad: Remove<br>
it from base, but teach GHC to not error out if an instance defines<br>
(/=), but print a warning and otherwise ignore it. Libraries can remove<br>
it if it is defined, which is a backwards-compatible change.<br>
<br>
WDYT?<br>
Joachim<br>
<br>
<br>
-- <br>
Joachim Breitner<br>
  <a href="mailto:mail@joachim-breitner.de" target="_blank" rel="noreferrer">mail@joachim-breitner.de</a><br>
  <a href="http://www.joachim-breitner.de/" rel="noreferrer noreferrer" target="_blank">http://www.joachim-breitner.de/</a><br>
<br>
<br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org" target="_blank" rel="noreferrer">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries</a><br>
</blockquote></div>