A semigroup in type F must satisfy two laws:
A semigroup in type F must satisfy two laws:
∀ a, b in F, append(a, b)
is also in F
. This is enforced by the type system.∀ a, b, c
in F
, the equation append(append(a, b), c) = append(a, append(b , c))
holds.
An scalaz.Apply, that implements ap
with append
.
An scalaz.Apply, that implements ap
with append
. Note
that the type parameter α
in Apply[λ[α => F]]
is
discarded; it is a phantom type. As such, the functor cannot
support scalaz.Bind.
Every Semigroup
gives rise to a scalaz.Compose, for which
the type parameters are phantoms.
Every Semigroup
gives rise to a scalaz.Compose, for which
the type parameters are phantoms.
compose.semigroup
= this
For n = 0
, value
For n = 1
, append(value, value)
For n = 2
, append(append(value, value), value)
For n = 0
, value
For n = 1
, append(value, value)
For n = 2
, append(append(value, value), value)
The default definition uses peasant multiplication, exploiting associativity to only
require O(log n)
uses of append
Unfold seed
to the left and sum using #append.
Unfold seed
to the left and sum using #append.
Semigroups with right absorbing elements may override this method
to not unfold more than is necessary to determine the result.
Unfold seed
to the right and sum using #append.
Unfold seed
to the right and sum using #append.
Semigroups with left absorbing elements may override this method
to not unfold more than is necessary to determine the result.
An associative binary operation, circumscribed by type and the semigroup laws. Unlike scalaz.Monoid, there is not necessarily a zero.
http://mathworld.wolfram.com/Semigroup.html
scalaz.syntax.SemigroupOps
scalaz.Semigroup.SemigroupLaw