summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorf-a <fa-ml@ariis.it>2020-10-01 15:06:07 -0400
committerBen Gamari <ben@smart-cactus.org>2020-10-16 10:14:39 -0400
commit07b0db86595890dfca6f624e554cdb8c9b86d0cc (patch)
treec5bb8a25cc55fe0ed048e008414f13186a11e3f8
parent9a9679dbfc77c600e6c2a031ccab37d203a19cf9 (diff)
downloadhaskell-07b0db86595890dfca6f624e554cdb8c9b86d0cc.tar.gz
Clarify Eq documentation #18713
-rw-r--r--libraries/ghc-prim/GHC/Classes.hs13
1 files changed, 4 insertions, 9 deletions
diff --git a/libraries/ghc-prim/GHC/Classes.hs b/libraries/ghc-prim/GHC/Classes.hs
index 105875b450..70749097dd 100644
--- a/libraries/ghc-prim/GHC/Classes.hs
+++ b/libraries/ghc-prim/GHC/Classes.hs
@@ -125,18 +125,13 @@ and @('>=')@ for the types in "GHC.Word" and "GHC.Int".
-- and 'Eq' may be derived for any datatype whose constituents are also
-- instances of 'Eq'.
--
--- The Haskell Report defines no laws for 'Eq'. However, '==' is customarily
--- expected to implement an equivalence relationship where two values comparing
--- equal are indistinguishable by "public" functions, with a "public" function
--- being one not allowing to see implementation details. For example, for a
--- type representing non-normalised natural numbers modulo 100, a "public"
--- function doesn't make the difference between 1 and 201. It is expected to
--- have the following properties:
+-- The Haskell Report defines no laws for 'Eq'. However, instances are
+-- encouraged to follow these properties:
--
-- [__Reflexivity__]: @x == x@ = 'True'
-- [__Symmetry__]: @x == y@ = @y == x@
-- [__Transitivity__]: if @x == y && y == z@ = 'True', then @x == z@ = 'True'
--- [__Substitutivity__]: if @x == y@ = 'True' and @f@ is a "public" function
+-- [__Extensionality__]: if @x == y@ = 'True' and @f@ is a function
-- whose return type is an instance of 'Eq', then @f x == f y@ = 'True'
-- [__Negation__]: @x /= y@ = @not (x == y)@
--
@@ -234,7 +229,7 @@ eqChar, neChar :: Char -> Char -> Bool
-- >>> 0/0 == (0/0 :: Float)
-- False
--
--- Also note that `Float`'s 'Eq' instance does not satisfy substitutivity:
+-- Also note that `Float`'s 'Eq' instance does not satisfy extensionality:
--
-- >>> 0 == (-0 :: Float)
-- True