[project @ 2001-07-12 16:21:22 by simonpj]
[ghc-hetmet.git] / ghc / compiler / hsSyn / HsLit.lhs
index 7111cbd..39d737d 100644 (file)
@@ -8,7 +8,8 @@ module HsLit where
 
 #include "HsVersions.h"
 
-import Type    ( Type )        
+import Type    ( Type )
+import HsTypes ( PostTcType )
 import Outputable
 import Ratio   ( Rational )
 \end{code}
@@ -34,12 +35,25 @@ data HsLit
   | HsRat          Rational Type       -- Genuinely a rational; arises only from TRANSLATION
   | HsFloatPrim            Rational            -- Unboxed Float
   | HsDoublePrim    Rational           -- Unboxed Double
-  | HsLitLit       FAST_STRING Type    -- to pass ``literal literals'' through to C
-                                       -- also: "overloaded" type; but
-                                       -- must resolve to boxed-primitive!
+  | HsLitLit       FAST_STRING PostTcType      -- to pass ``literal literals'' through to C
+                                               -- also: "overloaded" type; but
+                                               -- must resolve to boxed-primitive!
        -- The Type in HsLitLit is needed when desuaring;
        -- before the typechecker it's just an error value
-  deriving( Eq )
+
+instance Eq HsLit where
+  (HsChar x1)      == (HsChar x2)       = x1==x2
+  (HsCharPrim x1)   == (HsCharPrim x2)  = x1==x2
+  (HsString x1)     == (HsString x2)    = x1==x2
+  (HsStringPrim x1) == (HsStringPrim x2) = x1==x2
+  (HsInt x1)       == (HsInt x2)        = x1==x2
+  (HsIntPrim x1)    == (HsIntPrim x2)    = x1==x2
+  (HsInteger x1)    == (HsInteger x2)    = x1==x2
+  (HsRat x1 _)     == (HsRat x2 _)      = x1==x2
+  (HsFloatPrim x1)  == (HsFloatPrim x2)  = x1==x2
+  (HsDoublePrim x1) == (HsDoublePrim x2) = x1==x2
+  (HsLitLit x1 _)   == (HsLitLit x2 _)   = x1==x2
+  lit1             == lit2              = False
 
 data HsOverLit                 -- An overloaded literal
   = HsIntegral     Integer             -- Integer-looking literals;