
On 9/26/11 1:05 AM, Bryan O'Sullivan wrote:
On Sun, Sep 25, 2011 at 10:53 PM, Daniel Fischer< daniel.is.fischer@googlemail.com> wrote:
Proposal: Provide Double and Float with Eq and Ord instances that introduce a total order.
I am strongly against this proposal, as it is in an area that is particularly poorly understood by most programmers (even experts). While the current behaviour may be undesirable from some points of view, at least it is consistent with most other programming languages - and this is one of the few areas where I think that's important.
I am also opposed to this proposal. I agree that the current situation is problematic, however I do not see this proposal as an improvement. Actual improvements would be to: (a) distinguish classes for semantic ordering vs arbitrary ordering, where the latter is used by Data.Map and friends, whereas the former is used whenever we expect the results to be meaningful; or (b) distinguish classes for partial orders vs total orders, either as is done in the logfloat package, by flattening the (Maybe Ordering) representation if people find that preferable, or by figuring out some better theory/combinators for partial orders. In either case, Double/Float will not have instances for Ord because these types do not have a semantic total ordering. Moreover, the current proposal grossly violates the principle of least surprise (for new users) and is guaranteed to introduce subtle and obscure bugs (for old users) since we cannot detect where the old behavior is being relied upon, either explicitly or implicitly. -- Live well, ~wren