X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=compiler%2FbasicTypes%2FBasicTypes.lhs;h=7ea66e1db2bf722a704c66f5c26e72c1e0e2d035;hp=a76ee64a80ae6a491b03458744f8b2cdad6e32ea;hb=f8f0e76ad302fda30196ebc9230e5fcbc97be537;hpb=3391a03562d4056de7b16cd0f632e6c43ae44cca diff --git a/compiler/basicTypes/BasicTypes.lhs b/compiler/basicTypes/BasicTypes.lhs index a76ee64..7ea66e1 100644 --- a/compiler/basicTypes/BasicTypes.lhs +++ b/compiler/basicTypes/BasicTypes.lhs @@ -74,7 +74,7 @@ module BasicTypes( SuccessFlag(..), succeeded, failed, successIf, - FractionalLit(..) + FractionalLit(..), negateFractionalLit, integralFractionalLit ) where import FastString @@ -868,15 +868,23 @@ 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 , fl_value :: Rational -- Numeric value of the literal } - deriving (Data, Typeable) + deriving (Data, Typeable, Show) + -- The Show instance is required for the derived Lexer.x:Token instance when DEBUG is on + +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 +894,7 @@ instance Eq FractionalLit where instance Ord FractionalLit where compare = compare `on` fl_value + +instance Outputable FractionalLit where + ppr = text . fl_text \end{code}