Remove unnecessary Ord instance for ConLike
authorBartosz Nitka <niteria@gmail.com>
Mon, 21 Mar 2016 10:34:03 +0000 (03:34 -0700)
committerBartosz Nitka <niteria@gmail.com>
Mon, 21 Mar 2016 10:41:49 +0000 (03:41 -0700)
The Ord instance for ConLike uses Unique order which is bad for
determinism. Fortunately it's not used, so we can just delete it.
The is part of the effort to make Unique comparisons explicit.

Test Plan: ./validate

Reviewers: austin, simonmar, bgamari, simonpj

Reviewed By: simonpj

Subscribers: thomie

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

GHC Trac Issues: #4012

compiler/basicTypes/ConLike.hs
compiler/basicTypes/ConLike.hs-boot
compiler/types/TyCoRep.hs

index c25f822..69d1836 100644 (file)
@@ -65,12 +65,9 @@ instance Eq ConLike where
     (==) = (==) `on` getUnique
     (/=) = (/=) `on` getUnique
 
     (==) = (==) `on` getUnique
     (/=) = (/=) `on` getUnique
 
-instance Ord ConLike where
-    (<=) = (<=) `on` getUnique
-    (<) = (<) `on` getUnique
-    (>=) = (>=) `on` getUnique
-    (>) = (>) `on` getUnique
-    compare = compare `on` getUnique
+-- There used to be an Ord ConLike instance here that used Unique for ordering.
+-- It was intentionally removed to prevent determinism problems.
+-- See Note [Unique Determinism] in Unique.
 
 instance Uniquable ConLike where
     getUnique (RealDataCon dc) = getUnique dc
 
 instance Uniquable ConLike where
     getUnique (RealDataCon dc) = getUnique dc
index 3463287..c915364 100644 (file)
@@ -11,7 +11,6 @@ data ConLike = RealDataCon DataCon
 
 instance Eq ConLike
 instance Typeable ConLike
 
 instance Eq ConLike
 instance Typeable ConLike
-instance Ord ConLike
 instance NamedThing ConLike
 instance Data ConLike
 instance Outputable ConLike
 instance NamedThing ConLike
 instance Data ConLike
 instance Outputable ConLike
index fa123a0..6fe1ce3 100644 (file)
@@ -1456,7 +1456,7 @@ data TyThing
   | AConLike ConLike
   | ATyCon   TyCon       -- TyCons and classes; see Note [ATyCon for classes]
   | ACoAxiom (CoAxiom Branched)
   | AConLike ConLike
   | ATyCon   TyCon       -- TyCons and classes; see Note [ATyCon for classes]
   | ACoAxiom (CoAxiom Branched)
-  deriving (Eq, Ord)
+  deriving (Eq)
 
 instance Outputable TyThing where
   ppr = pprTyThing
 
 instance Outputable TyThing where
   ppr = pprTyThing