summaryrefslogtreecommitdiff
path: root/libraries/base/Data/Type/Equality.hs
diff options
context:
space:
mode:
Diffstat (limited to 'libraries/base/Data/Type/Equality.hs')
-rw-r--r--libraries/base/Data/Type/Equality.hs25
1 files changed, 25 insertions, 0 deletions
diff --git a/libraries/base/Data/Type/Equality.hs b/libraries/base/Data/Type/Equality.hs
index 73f8407cb0..69da70b78c 100644
--- a/libraries/base/Data/Type/Equality.hs
+++ b/libraries/base/Data/Type/Equality.hs
@@ -145,6 +145,27 @@ deriving instance a ~ b => Bounded (a :~: b)
data (a :: k1) :~~: (b :: k2) where
HRefl :: a :~~: a
+-- | @since 4.10.0.0
+deriving instance Eq (a :~~: b)
+-- | @since 4.10.0.0
+deriving instance Show (a :~~: b)
+-- | @since 4.10.0.0
+deriving instance Ord (a :~~: b)
+
+-- | @since 4.10.0.0
+instance a ~~ b => Read (a :~~: b) where
+ readsPrec d = readParen (d > 10) (\r -> [(HRefl, s) | ("HRefl",s) <- lex r ])
+
+-- | @since 4.10.0.0
+instance a ~~ b => Enum (a :~~: b) where
+ toEnum 0 = HRefl
+ toEnum _ = errorWithoutStackTrace "Data.Type.Equality.toEnum: bad argument"
+
+ fromEnum HRefl = 0
+
+-- | @since 4.10.0.0
+deriving instance a ~~ b => Bounded (a :~~: b)
+
-- | This class contains types where you can learn the equality of two types
-- from information contained in /terms/. Typically, only singleton types should
-- inhabit this class.
@@ -156,6 +177,10 @@ class TestEquality f where
instance TestEquality ((:~:) a) where
testEquality Refl Refl = Just Refl
+-- | @since 4.10.0.0
+instance TestEquality ((:~~:) a) where
+ testEquality HRefl HRefl = Just Refl
+
-- | A type family to compute Boolean equality. Instances are provided
-- only for /open/ kinds, such as @*@ and function kinds. Instances are
-- also provided for datatypes exported from base. A poly-kinded instance