<div dir="ltr">One thing to consider is that, if you look at the Report specification for derived Ord instances and of the default (compare), you'll find that it explicitly depends on (==). So you don't actually need a "law" here.</div><br><div class="gmail_quote"><div dir="ltr">On Tue, May 29, 2018 at 3:03 PM Johannes Waldmann <<a href="mailto:johannes.waldmann@htwk-leipzig.de">johannes.waldmann@htwk-leipzig.de</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Dear Cafe,<br>
<br>
I am somewhat surprised that the Haskell Standard (*)<br>
<a href="https://www.haskell.org/onlinereport/haskell2010/haskellch6.html#x13-1270006.3" rel="noreferrer" target="_blank">https://www.haskell.org/onlinereport/haskell2010/haskellch6.html#x13-1270006.3</a><br>
does not contain any<br>
notation for (intended) properties of Eq and Ord instances,<br>
and their relation. For Java (standard library),<br>
the API spec uses wording like "consistent with equals"<br>
<a href="https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html" rel="noreferrer" target="_blank">https://docs.oracle.com/javase/10/docs/api/java/lang/Comparable.html</a><br>
<br>
I am well aware that semantics (transitivity, etc.)<br>
cannot be enforced statically, in either language.<br>
But both standards still speak of "total order".<br>
Do we (Haskell) need something similar to "consistent with equals"?<br>
<br>
It depends. E.g., looking at a (random) source in containers<br>
(Data.Map.Internal), it seems that it will always use the result of<br>
compare, never of (==), on keys. That's not obvious from the docs.<br>
I just checked -- I can make a type where (==) = undefined,<br>
but write a proper Ord instance, and use it as key type.<br>
<br>
I am asking this because I will be teaching type classes,<br>
with Eq and Ord as examples. I detected the funny situation<br>
that the Java specification looks "more mathematical"<br>
than the corresponding Haskell one. What will the students think ...<br>
<br>
- J.W.<br>
<br>
(*) The Haskell standard is what you find when you scroll<br>
down, down, down to the very bottom of<br>
<a href="https://www.haskell.org/documentation" rel="noreferrer" target="_blank">https://www.haskell.org/documentation</a> . So, probably not that important...<br>
_______________________________________________<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">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>