On Tuesday 20 September 2011, 17:39:49, Ketil Malde wrote: > Chris Smith <cdsm...@gmail.com> writes: > > It would be a shame if we lost an occasionally useful and easy to read > > You forgot "confusing"? Expecting Enum to enumerate all inhabitants of > a type seems very reasonable to me, and seems to hold for all > non-floating point types.
And Rational (more generally, Ratio a). (Why does everybody forget that?) Enumerating all inhabitants of a type (within some range) is only possible if there are well-defined successors and predecessors (modulo bounds). For Double and Float, there are (excepting NaNs), so it could be done, but arguably that would be *far less* useful than the current instances. For Rational, no such luck. > A numeric range [a..a+n] might be expected > to have a+n+1 elements, but that doesn't hold either for Float and > Double. I think Enum for floating point values is broken Yes, it is. Like Eq and Ord. > - but it is reality, so we need to deal with it. Like Eq and Ord, it's just too damn convenient to have it. So much nicer to write [0, 0.25 .. 1000] instead of numericEnumFromThenTo 0 0.25 1000 and (x /= y) instead of doublesDifferentOrNaN x y _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe