+{-# RULES
+"fromIntegral/Int->Int" fromIntegral = id :: Int -> Int
+"fromIntegral/Integer->Integer" fromIntegral = id :: Integer -> Integer
+"fromIntegral/Int->Integer" fromIntegral = int2Integer
+"fromIntegral/Integer->Int" fromIntegral = integer2Int
+"fromIntegral/Int->Rational" forall n . fromIntegral n = int2Integer n :% 1
+"fromIntegral/Integer->Rational" forall n . fromIntegral n = n :% (1 :: Integer)
+"fromIntegral/Int->Float" fromIntegral = int2Float
+"fromIntegral/Int->Double" fromIntegral = int2Double
+"fromIntegral/Integer->Float" forall n . fromIntegral n = encodeFloat n 0 :: Float
+"fromIntegral/Integer->Double" forall n . fromIntegral n = encodeFloat n 0 :: Double
+ #-}