A logical definition of Enum (to me wearing a mathematical hat) 
would be

succ x = min { y | y > x}

For Ratio this makes no sense, ergo Ratio should not be an
instance of Enum.  For Float and Doubles it makes a lot of
sense (giving nextAfter, which is a commonly used IEEE function not
otherwise available).  

The Prelude is wrong in two ways with Floats/Doubles:
(1) It thinks Float and Double are continuous types. 
(2) It doesn't say what happens when you do 
    succ(1.0e20) (assuming 1.0e20 is too big for Int).
I wonder if anyone can guess what answer Hugs gives for
"succ 1.0e20" ?

Solution - remove the current definitions of Enum and replace
with the simple mathematical one . . .

Reply via email to