Use FractionalLit more extensively to improve other pretty printers
[ghc-hetmet.git] / compiler / basicTypes / BasicTypes.lhs
index a76ee64..65002d5 100644 (file)
@@ -74,7 +74,7 @@ module BasicTypes(
 
        SuccessFlag(..), succeeded, failed, successIf,
        
-       FractionalLit(..)
+       FractionalLit(..), negateFractionalLit, integralFractionalLit
    ) where
 
 import FastString
@@ -868,9 +868,9 @@ isEarlyActive _                     = False
 
 
 \begin{code}
--- Used to represent exactly the floating point literal that we encountered in
--- the user's source program. This allows us to pretty-print exactly what the user
--- wrote, which is important e.g. for floating point numbers that can't represented
+-- Used (instead of Rational) to represent exactly the floating point literal that we
+-- encountered in the user's source program. This allows us to pretty-print exactly what
+-- the user wrote, which is important e.g. for floating point numbers that can't represented
 -- as Doubles (we used to via Double for pretty-printing). See also #2245.
 data FractionalLit
   = FL { fl_text :: String         -- How the value was written in the source
@@ -878,6 +878,13 @@ data FractionalLit
        }
   deriving (Data, Typeable)
 
+negateFractionalLit :: FractionalLit -> FractionalLit
+negateFractionalLit (FL { fl_text = '-':text, fl_value = value }) = FL { fl_text = text, fl_value = negate value }
+negateFractionalLit (FL { fl_text = text, fl_value = value }) = FL { fl_text = '-':text, fl_value = negate value }
+
+integralFractionalLit :: Integer -> FractionalLit
+integralFractionalLit i = FL { fl_text = show i, fl_value = fromInteger i }
+
 -- Comparison operations are needed when grouping literals
 -- for compiling pattern-matching (module MatchLit)
 
@@ -886,4 +893,7 @@ instance Eq FractionalLit where
 
 instance Ord FractionalLit where
   compare = compare `on` fl_value
+
+instance Outputable FractionalLit where
+  ppr = text . fl_text
 \end{code}