Add Eq instances for TrName, Module
authorBen Gamari <bgamari.foss@gmail.com>
Mon, 27 Feb 2017 22:12:04 +0000 (17:12 -0500)
committerBen Gamari <ben@smart-cactus.org>
Tue, 28 Feb 2017 15:56:06 +0000 (10:56 -0500)
Test Plan: Validate

Reviewers: austin

Subscribers: thomie

Differential Revision: https://phabricator.haskell.org/D3227

libraries/ghc-prim/GHC/Classes.hs
testsuite/tests/typecheck/should_fail/T5095.stderr

index 3fd4bc0..4479ac0 100644 (file)
@@ -58,6 +58,7 @@ import GHC.Magic ()
 import GHC.IntWord64
 import GHC.Prim
 import GHC.Tuple
+import GHC.CString (unpackCString#)
 import GHC.Types
 
 #include "MachDeps.h"
@@ -171,6 +172,15 @@ instance (Eq a) => Eq [a] where
     (x:xs) == (y:ys) = x == y && xs == ys
     _xs    == _ys    = False
 
+deriving instance Eq Module
+
+instance Eq TrName where
+    TrNameS a == TrNameS b = isTrue# (a `eqAddr#` b)
+    a == b = toString a == toString b
+      where
+        toString (TrNameS s) = unpackCString# s
+        toString (TrNameD s) = s
+
 deriving instance Eq Bool
 deriving instance Eq Ordering
 
index a959811..14d864a 100644 (file)
@@ -7,7 +7,7 @@ T5095.hs:9:9: error:
         instance Eq Integer
           -- Defined in ‘integer-gmp-1.0.0.1:GHC.Integer.Type’
         ...plus 23 others
-        ...plus three instances involving out-of-scope types
+        ...plus five instances involving out-of-scope types
         (use -fprint-potential-instances to see them all)
       (The choice depends on the instantiation of ‘a’
        To pick the first instance above, use IncoherentInstances