Ord methods are surprisingly strict
Andreas Abel
andreas.abel at ifi.lmu.de
Thu May 7 18:57:32 UTC 2020
Someone who knows the lore. Thanks for the enlightening references!
Another reason for <= to be strict is symmetry. Why would
False <= undefined = True
be preferable to
undefined <= True = True ?
And we cannot have both. The natural assumption is that neither of
these hold.
That said, my self-defined instances of Ord are usually not that strict.
--Andreas
On 2020-05-07 20:00, Sven Panne wrote:
> Am Do., 7. Mai 2020 um 15:26 Uhr schrieb David Feuer
> <david.feuer at gmail.com <mailto:david.feuer at gmail.com>>:
>
> I believe this is all about strictness analysis. If these were lazy,
> then users would have to be very careful to force the lazy arguments
> when they don't need that laziness to avoid building unnecessary thunks.
>
>
> This argument holds basically for every potentially lazy function, and I
> fail to see why comparisons should be special, so this is not really
> convincing. :-) We have easy ways to make things more strict, but not
> the other way around.
>
> In any case, it has historically been the case that the reference
> implementations in the Haskell language/library report define the
> strictness of the defined functions, too. Otherwise things could be very
> surprising, in both ways (too lazy, too strict). Furthermore, the report
> is *very* explicit about the derived instances:
> https://www.haskell.org/onlinereport/haskell2010/haskellch11.html#x18-18300011.1 And
> (), Bool, ... are defined via deriving:
> https://www.haskell.org/onlinereport/haskell2010/haskellch9.html#x16-1710009
More information about the Libraries
mailing list