Repair to floating point enumerations?

Simon Marlow marlowsd at
Wed Oct 22 06:11:54 EDT 2008

Malcolm Wallace wrote:

> Phil proposes that, although retaining the instances of Enum for Float
> and Double, we simplify the definitions of the numericEnumFrom family:
>   numericEnumFromThenTo   :: (Fractional a, Ord a) => a -> a -> a -> [a]
>   numericEnumFrom         =  iterate (+1)
>   numericEnumFromThen n m =  iterate (+(m-n)) n
>   numericEnumFromTo n m   =  takeWhile (<= m) (numericEnumFrom n)
>   numericEnumFromThenTo n m p = takeWhile (<= p) (numericEnumFromThen n m)

I'll leave it to the floating-point experts to decide exactly what to do 
here for Haskell' (but I note that David Roundy's version looks better than 
the iterate version above, because the errors won't accumulate).

> But as maintainer and bug-fixer of the Haskell'98 Report, I have also
> been asked whether we should make this change retrospectively to the
> Haskell'98 language (as a "typo").  Since it involves not merely an
> ordinary library function, but a Prelude function, and moreover a
> function that is used in the desugaring of syntax, it is less clear to
> me whether to alter Haskell'98.

We definitely can't make breaking changes to Haskell 98; this would be much 
more than a "typo".

However, this does give us a problem if we decide to make a change here for 
H', as Neil points out, because there would be two mutually-incompatible 
instances for Enum Float.  We'd need to have a clear distinction between 
programs that are Haskell 98 and those that are not, with only the former 
allowed to use the haskell98 package.


More information about the Libraries mailing list