diff --git a/ghc/lib/std/PrelFloat.lhs b/ghc/lib/std/PrelFloat.lhs
index bb85dcc7beb1dd4c8c304d7231f4b0dfcd464606..889c520e7e73cee813d84302f4d1e0782b0e35c5 100644
--- a/ghc/lib/std/PrelFloat.lhs
+++ b/ghc/lib/std/PrelFloat.lhs
@@ -441,22 +441,6 @@ instance  Enum Double  where
     enumFromTo     =  numericEnumFromTo
     enumFromThen   =  numericEnumFromThen
     enumFromThenTo =  numericEnumFromThenTo
-
-numericEnumFrom		:: (Fractional a) => a -> [a]
-numericEnumFrom		=  iterate (+1)
-
-numericEnumFromThen	:: (Fractional a) => a -> a -> [a]
-numericEnumFromThen n m	=  iterate (+(m-n)) n
-
-numericEnumFromTo       :: (Ord a, Fractional a) => a -> a -> [a]
-numericEnumFromTo n m   = takeWhile (<= m + 1/2) (numericEnumFrom n)
-
-numericEnumFromThenTo   :: (Ord a, Fractional a) => a -> a -> a -> [a]
-numericEnumFromThenTo e1 e2 e3 = takeWhile pred (numericEnumFromThen e1 e2)
-				where
-				 mid = (e2 - e1) / 2
-				 pred | e2 > e1   = (<= e3 + mid)
-				      | otherwise = (>= e3 + mid)
 \end{code}
 
 
diff --git a/ghc/lib/std/PrelReal.lhs b/ghc/lib/std/PrelReal.lhs
index 530f12306c5fe366c1ffabc0807ef5d2caf73c66..e6d64d5eedcb820753f01bd0f35e49e03576ece4 100644
--- a/ghc/lib/std/PrelReal.lhs
+++ b/ghc/lib/std/PrelReal.lhs
@@ -126,6 +126,27 @@ class  (Real a, Fractional a) => RealFrac a  where
 \end{code}
 
 
+These 'numeric' enumerations come straight from the Report
+
+\begin{code}
+numericEnumFrom		:: (Fractional a) => a -> [a]
+numericEnumFrom		=  iterate (+1)
+
+numericEnumFromThen	:: (Fractional a) => a -> a -> [a]
+numericEnumFromThen n m	=  iterate (+(m-n)) n
+
+numericEnumFromTo       :: (Ord a, Fractional a) => a -> a -> [a]
+numericEnumFromTo n m   = takeWhile (<= m + 1/2) (numericEnumFrom n)
+
+numericEnumFromThenTo   :: (Ord a, Fractional a) => a -> a -> a -> [a]
+numericEnumFromThenTo e1 e2 e3 = takeWhile pred (numericEnumFromThen e1 e2)
+				where
+				 mid = (e2 - e1) / 2
+				 pred | e2 > e1   = (<= e3 + mid)
+				      | otherwise = (>= e3 + mid)
+\end{code}
+
+
 %*********************************************************
 %*							*
 \subsection{Instances for @Int@}
@@ -227,17 +248,10 @@ instance  (Integral a)	=> Enum (Ratio a)  where
     toEnum n            =  fromInt n :% 1
     fromEnum            =  fromInteger . truncate
 
-    enumFrom		=  bounded_iterator True (1)
-    enumFromThen n m	=  bounded_iterator (diff >= 0) diff n 
-			where diff = m - n
-
-bounded_iterator :: (Ord a, Num a) => Bool -> a -> a -> [a]
-bounded_iterator inc step v 
-   | inc      && v > new_v = [v]  -- oflow
-   | not inc  && v < new_v = [v]  -- uflow
-   | otherwise             = v : bounded_iterator inc step new_v
-  where
-   new_v = v + step
+    enumFrom		=  numericEnumFrom
+    enumFromThen 	=  numericEnumFromThen
+    enumFromTo		=  numericEnumFromTo
+    enumFromThenTo	=  numericEnumFromThenTo
 \end{code}