Bands are semigroups whose operation (i.e.
An commutative group (also known as an abelian group) is a group whose combine operation is commutative.
CommutativeMonoid represents a commutative monoid.
CommutativeMonoid represents a commutative monoid.
A monoid is commutative if for all x and y, x |+| y === y |+| x.
CommutativeSemigroup represents a commutative semigroup.
CommutativeSemigroup represents a commutative semigroup.
A semigroup is commutative if for all x and y, x |+| y === y |+| x.
ADT encoding the possible results of a comparison
A type class used to determine equality between 2 instances of the same type.
A type class used to determine equality between 2 instances of the same
type. Any 2 instances x
and y
are equal if eqv(x, y)
is true
.
Moreover, eqv
should form an equivalence relation.
A group is a monoid where each element has an inverse.
A type class used to represent a hashing scheme for objects of a given type.
A type class used to represent a hashing scheme for objects of a given type.
For any two instances x
and y
that are considered equivalent under the
equivalence relation defined by this object, hash(x)
should equal hash(y)
.
A monoid is a semigroup with an identity.
A monoid is a semigroup with an identity. A monoid is a specialization of a
semigroup, so its operation must be associative. Additionally,
combine(x, empty) == combine(empty, x) == x
. For example, if we have Monoid[String]
,
with combine
as string concatenation, then empty = ""
.
The Order
type class is used to define a total ordering on some type A
.
The Order
type class is used to define a total ordering on some type A
.
An order is defined by a relation <=, which obeys the following laws:
- either x <= y or y <= x (totality) - if x <= y and y <= x, then x == y (antisymmetry) - if x <= y and y <= z, then x <= z (transitivity)
The truth table for compare is defined as follows:
x <= y x >= y Int true true = 0 (corresponds to x == y) true false < 0 (corresponds to x < y) false true > 0 (corresponds to x > y)
By the totality law, x <= y and y <= x cannot be both false.
The PartialOrder
type class is used to define a partial ordering on some type A
.
The PartialOrder
type class is used to define a partial ordering on some type A
.
A partial order is defined by a relation <=, which obeys the following laws:
- x <= x (reflexivity) - if x <= y and y <= x, then x = y (anti-symmetry) - if x <= y and y <= z, then x <= z (transitivity)
To compute both <= and >= at the same time, we use a Double number to encode the result of the comparisons x <= y and x >= y. The truth table is defined as follows:
x <= y x >= y Double true true = 0.0 (corresponds to x = y) false false = NaN (x and y cannot be compared) true false = -1.0 (corresponds to x < y) false true = 1.0 (corresponds to x > y)
A semigroup is any set A
with an associative operation (combine
).
Semilattices are commutative semigroups whose operation (i.e.
Semilattices are commutative semigroups whose operation (i.e. combine) is also idempotent.
Bands are semigroups whose operation (i.e. combine) is also idempotent.