<div dir="ltr"><div>One of the relationships implied by the Ord typeclass is:<br><br>a <= b = True  iff  compare a b = EQ \/ compare a b = LT</div><div><br></div><div>If we write an alternative definition of (<=) that is only strict in its first argument:<br><br>False <= _ = True</div><div>True <= x = x</div><div><br></div><div>Then it's impossible to write `compare` in a way that's consistent with that relation.</div><div><br></div><div>More concretely, it's likely that Ord Bool is defined via `compare`, which is necessarily strict in both arguments.</div><div><br><div class="gmail_quote"><div dir="ltr">On Wed, 2 Jan. 2019, 7:47 pm V.Liepelt, <<a href="mailto:V.Liepelt@kent.ac.uk" target="_blank">V.Liepelt@kent.ac.uk</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I am surprised to find that `False <= undefined = undefined`.<br>
<br>
What justifies (<=) to be strict in both arguments?<br>
<br>
Vilem<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>
</div></div>