Bands are semigroups whose operation (i.e.
Bands are semigroups whose operation (i.e. combine) is also idempotent.
An abelian group is a group whose 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.
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 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)
Priority is a type class for prioritized implicit search.
Priority is a type class for prioritized implicit search.
This type class will attempt to provide an implicit instance of P
(the preferred type). If that type is not available it will
fallback to F
(the fallback type). If neither type is available
then a Priority[P, F]
instance will not be available.
This type can be useful for problems where multiple algorithms can be used, depending on the type classes available.
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.