The
Eq class defines equality (
==) and inequality
(
/=). All the basic datatypes exported by the
Prelude
are instances of
Eq, 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:
- 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 whose return type is an instance of
Eq, then f x == f y = True
- Negation x /= y = not (x ==
y)
Minimal complete definition: either
== or
/=.