Rational sequence

Dean Herington heringto@cs.unc.edu
Thu, 24 Oct 2002 13:56:15 -0400


Ferenc Wagner wrote:

> "Simon Peyton-Jones" <simonpj@microsoft.com> writes:
>
> > So I propose to modify the instance decl for Ratio by
> > adding explicit defns for succ/pred just like those in
> > Float/Double.
>
> I bet you guessed: once at it, what about removing those
> unintuitive 1/2-s, like:
>
> numericEnumFromTo n m = takeWhile (<= m) (numericEnumFrom n)
> numericEnumFromThenTo n n' m = takeWhile p (numericEnumFromThen n n')
>                              where
>                                p | n' > n    = (<= m + (n'-n))
>                                  | otherwise = (>= m + (n'-n))
>
> Everybody working with floats should know their quirks, while
> Rationals should be treated exactly.

It's inconsistent to remove the "+1/2" for numericEnumFromTo but to leave
the "+(n'-n)" for numericEnumFromThenTo.  I think you probably mean to
remove both (actually, all three).

I wouldn't recommend these changes for Float and Double (the increments
are there to account for arithmetic inexactness), but they do make a lot
of sense to me for (Ratio a), which is exact.  Is is too late to consider
such a change?

 -- Dean