[project @ 2000-05-10 09:27:59 by panne]
authorpanne <unknown>
Wed, 10 May 2000 09:27:59 +0000 (09:27 +0000)
committerpanne <unknown>
Wed, 10 May 2000 09:27:59 +0000 (09:27 +0000)
Added RULES for realToFrac with types
   Double   -> Float
   Float    -> Double
   Double   -> Double
   Float    -> Float
   Rational -> Rational

ghc/lib/std/Prelude.lhs

index 7a09c42..58de274 100644 (file)
@@ -200,13 +200,24 @@ fromIntegral      =  fromInteger . toInteger
     Double     -> Rational, 
     Rational   -> Double,
     Float      -> Rational,
-    Rational   -> Float,
-    Rational   -> Rational,
-    Double     -> Double,
-    Double     -> Float,
-    Float      -> Float,
-    Float      -> Double #-}
+    Rational   -> Float
+ #-}
 realToFrac     :: (Real a, Fractional b) => a -> b
 realToFrac     =  fromRational . toRational
+
+{-# RULES
+"realToFrac/Double->Float"      realToFrac = doubleToFloat
+"realToFrac/Float->Double"      realToFrac = floatToDouble
+"realToFrac/Double->Double"     realToFrac = id :: Double -> Double
+"realToFrac/Float->Float"       realToFrac = id :: Float -> Float
+"realToFrac/Rational->Rational" realToFrac = id :: Rational -> Rational
+ #-}
+
+doubleToFloat :: Double -> Float
+doubleToFloat (D# d) = F# (double2Float# d)
+
+floatToDouble :: Float -> Double
+floatToDouble (F# f) = D# (float2Double# f)
+
 \end{code}