<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<blockquote type="cite" class="">
<div dir="ltr" class="">
<div class="">More concretely, it's likely that Ord Bool is defined via `compare`, which is necessarily strict in both arguments.</div>
</div>
</blockquote>
<div class=""><br class="">
</div>
Yes, this did come to mind. In general a non-strict `compare` would only make sense for `()`.
<div class=""><br class="">
<div class="">
<blockquote type="cite" class="">
<div dir="ltr" class="">
<div class="">One of the relationships implied by the Ord typeclass is:<br class="">
<br class="">
a <= b = True  iff  compare a b = EQ \/ compare a b = LT</div>
</div>
</blockquote>
</div>
<div class="">
<div dir="ltr" class="">
<div class=""><br class="">
</div>
</div>
</div>
<div class="">So wouldn’t it make sense to define `compare` in terms of the “weaker” relations? It seems very unhaskelly to do the unnecessary work of evaluating the second argument to a relation when we already know what the result should be.</div>
<div class=""><br class="">
</div>
<div class="">Vilem</div>
<div class="">
<div class="">
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 2 Jan 2019, at 10:29, Isaac Elliott <<a href="mailto:isaace71295@gmail.com" class="">isaace71295@gmail.com</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div dir="ltr" class="">
<div class="">One of the relationships implied by the Ord typeclass is:<br class="">
<br class="">
a <= b = True  iff  compare a b = EQ \/ compare a b = LT</div>
<div class=""><br class="">
</div>
<div class="">If we write an alternative definition of (<=) that is only strict in its first argument:<br class="">
<br class="">
False <= _ = True</div>
<div class="">True <= x = x</div>
<div class=""><br class="">
</div>
<div class="">Then it's impossible to write `compare` in a way that's consistent with that relation.</div>
<div class=""><br class="">
</div>
<div class="">More concretely, it's likely that Ord Bool is defined via `compare`, which is necessarily strict in both arguments.</div>
<div class=""><br class="">
<div class="gmail_quote">
<div dir="ltr" class="">On Wed, 2 Jan. 2019, 7:47 pm V.Liepelt, <<a href="mailto:V.Liepelt@kent.ac.uk" target="_blank" class="">V.Liepelt@kent.ac.uk</a>> wrote:<br class="">
</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 class="">
<br class="">
What justifies (<=) to be strict in both arguments?<br class="">
<br class="">
Vilem<br class="">
_______________________________________________<br class="">
Haskell-Cafe mailing list<br class="">
To (un)subscribe, modify options or view archives go to:<br class="">
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank" class="">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br class="">
Only members subscribed via the mailman list are allowed to post.</blockquote>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<br class="">
</div>
</div>
</div>
</body>
</html>