> I think a different aspect of this is: what are you trying to optimise?
Well, what led me to ask about this was not a particular problem but more the thought that such an optimisation might perhaps be possible and maybe already implemented. And if not, why.
If such an optimisation was not to ruin things it could be nice to have. One simple example is the list. The time it takes to establish that two lists are equal is linear to the number of elements. To establish if they are not equal requires only to find one differing element. When dealing with shared sub structures (sub lists in this case) this could matter a lot.
A nice effect is that we could then even establish equality for infinite lists when they are the same.
> I wanted this too when I first got into Haskell, but ultimately it comes down to not being semantically correct here.
Except for the floating points it would appear that most problems are caused by _|_ some way or another.