Semigroup -is:module

The class of semigroups (types with an associative binary operation). Instances should satisfy the following:
  • Associativity x <> (y <> z) = (x <> y) <> z
You can alternatively define sconcat instead of (<>), in which case the laws are:
The class of semigroups (types with an associative binary operation). Instances should satisfy the following:
  • Associativity x <> (y <> z) = (x <> y) <> z
You can alternatively define sconcat instead of (<>), in which case the laws are:
The class of semigroups (types with an associative binary operation). Instances should satisfy the following:
  • Associativity x <> (y <> z) = (x <> y) <> z
You can alternatively define sconcat instead of (<>), in which case the laws are: @since base-4.9.0.0
The class of semigroups (types with an associative binary operation). Instances should satisfy the following:
  • Associativity x <> (y <> z) = (x <> y) <> z
Not on Stackage, so not searched. A semigroup
Properties to check that the Semigroup a satisfies the semigroup properties. The argument value is ignored and is present only for its type.
Category sans id
Category sans id
For different Associative t, we have functors f that we can "squash", using biretract:
t f f ~> f
This gives us the ability to squash applications of t. Formally, if we have Associative t, we are enriching the category of endofunctors with semigroup structure, turning it into a semigroupoidal category. Different choices of t give different semigroupoidal categories. A functor f is known as a "semigroup in the (semigroupoidal) category of endofunctors on t" if we can biretract:
t f f ~> f
This gives us a few interesting results in category theory, which you can stil reading about if you don't care:
  • All functors are semigroups in the semigroupoidal category on :+:
  • The class of functors that are semigroups in the semigroupoidal category on :*: is exactly the functors that are instances of Alt.
  • The class of functors that are semigroups in the semigroupoidal category on Day is exactly the functors that are instances of Apply.
  • The class of functors that are semigroups in the semigroupoidal category on Comp is exactly the functors that are instances of Bind.
Note that instances of this class are intended to be written with t as a fixed type constructor, and f to be allowed to vary freely:
instance Bind f => SemigroupIn Comp f
Any other sort of instance and it's easy to run into problems with type inference. If you want to write an instance that's "polymorphic" on tensor choice, use the WrapHBF newtype wrapper over a type variable, where the second argument also uses a type constructor:
instance SemigroupIn (WrapHBF t) (MyFunctor t i)
This will prevent problems with overloaded instances.
Given monoidal categories <math> and <math>. A bifunctor <math> is Semigroupal if it supports a natural transformation <math>, which we call combine.

Laws

Associativity: <math>
combine . grmap combine . bwd assocfmap (bwd assoc) . combine . glmap combine
Given monoidal categories <math> and <math>. A functor <math> is Semigroupal if it supports a natural transformation <math>, which we call combine.

Laws

Associativity: <math>
combine . grmap combine . bwd assocfmap (bwd assoc) . combine . glmap combine
Given monoidal categories <math> and <math>. A bifunctor <math> is Semigroupal if it supports a natural transformation <math>, which we call combine.

Laws

Associativity: <math>
combine . grmap combine . bwd assocfmap (bwd assoc) . combine . glmap combine
Anything that associates In mathematics, a semigroup is an algebraic structure consisting of a set together with an associative binary operation. A semigroup generalizes a monoid in that there might not exist an identity element. It also (originally) generalized a group (a monoid with all inverses) to a type where every element did not have to have an inverse, thus the name semigroup.
Semigroupoids: Category sans id Provides a wide array of (semi)groupoids and operations for working with them. A Semigroupoid is a Category without the requirement of identity arrows for every object in the category. A Category is any Semigroupoid for which the Yoneda lemma holds. When working with comonads you often have the <*> portion of an Applicative, but not the pure. This was captured in Uustalu and Vene's "Essence of Dataflow Programming" in the form of the ComonadZip class in the days before Applicative. Apply provides a weaker invariant, but for the comonads used for data flow programming (found in the streams package), this invariant is preserved. Applicative function composition forms a semigroupoid. Similarly many structures are nearly a comonad, but not quite, for instance lists provide a reasonable extend operation in the form of tails, but do not always contain a value. We describe the relationships between the type classes defined in this package and those from base (and some from contravariant) in the diagram below. Thick-bordered nodes correspond to type classes defined in this package; thin-bordered ones correspond to type classes from elsewhere. Solid edges indicate a subclass relationship that actually exists; dashed edges indicate a subclass relationship that should exist, but currently doesn't. Apply, Bind, and Extend (not shown) give rise the Static, Kleisli and Cokleisli semigroupoids respectively. This lets us remove many of the restrictions from various monad transformers as in many cases the binding operation or <*> operation does not require them. Finally, to work with these weaker structures it is beneficial to have containers that can provide stronger guarantees about their contents, so versions of Traversable and Foldable that can be folded with just a Semigroup are added.
Tests the following properties:
Tests the following Semigroup laws:
Not on Stackage, so not searched. Semigroupoids that depend on PolyKinds
Not on Stackage, so not searched. RebindableSyntax using the semigroupoids package
Not on Stackage, so not searched. Semigroups actions
Not on Stackage, so not searched. Support for QualifiedDo with semigroupoids classes.