Monoid instances must satisfy SemigroupLaw and 2 additional laws:
A semigroup in type F must satisfy two laws:
The binary operation to combine f1
and f2
.
The binary operation to combine f1
and f2
.
Implementations should not evaluate the by-name parameter f2
if result
can be determined by f1
.
A monoidal applicative functor, that implements point
and ap
with the operations zero
and append
respectively.
An Apply, that implements ap
with append
.
Every Monoid
gives rise to a Category, for which
the type parameters are phantoms.
The composition of PlusEmpty F
and G
, [x]F[G[x]]
, is a PlusEmpty
The composition of PlusEmpty F
and G
, [x]F[G[x]]
, is a PlusEmpty
The composition of Plus F
and G
, [x]F[G[x]]
, is a Plus
The composition of Plus F
and G
, [x]F[G[x]]
, is a Plus
Every Semigroup
gives rise to a Compose, for which
the type parameters are phantoms.
true, if equal(f1, f2)
is known to be equivalent to f1 == f2
Whether a
== zero
.
Whether a
== zero
.
For n = 0
, zero
For n = 1
, append(zero, value)
For n = 2
, append(append(zero, value), value)
For n = 0
, zero
For n = 1
, append(zero, value)
For n = 2
, append(append(zero, value), value)
The product of PlusEmpty F
and G
, [x](F[x], G[x]])
, is a PlusEmpty
The product of PlusEmpty F
and G
, [x](F[x], G[x]])
, is a PlusEmpty
The product of Plus F
and G
, [x](F[x], G[x]])
, is a Plus
The product of Plus F
and G
, [x](F[x], G[x]])
, is a Plus
Order.fromScalaOrdering(toScalaOrdering).order(x, y)
this.order(x, y)
The identity element for append
.
The identity element for append
.