[ moved to [EMAIL PROTECTED] ]
> The Prelude contains:
>
> realToFrac:: (Real a, Fractional b) => a -> b
> realToFrac = fromRational . toRational
>
> Unfortunately GHC currently does not optimize this into anything
> smarter than going through Rational. Fortunately it contains enough
> machinery so you can let it optimize it yourself :-) Just add:
>
> import NumExts (floatToDouble, doubleToFloat)
>
> {-# RULES
> "realToFrac/Float->Double" realToFrac = floatToDouble
> "realToFrac/Double->Float" realToFrac = doubleToFloat #-}
>
> and compile with -syslib lang -O and use realToFrac.
Is this 4.06? The current prelude contains
{-# SPECIALIZE realToFrac ::
Double -> Rational,
Rational -> Double,
Float -> Rational,
Rational -> Float,
Rational -> Rational,
Double -> Double,
Double -> Float,
Float -> Float,
Float -> Double #-}
realToFrac :: (Real a, Fractional b) => a -> b
realToFrac = fromRational . toRational
which should provide for all your float-converting needs :-)
Cheers,
Simon