## Uses of Interface
com.jnape.palatable.lambda.semigroup.Semigroup

- Packages that use Semigroup
  Package | Description
  --- | ---
  com.jnape.palatable.lambda.functions.specialized |
  com.jnape.palatable.lambda.monoid |
  com.jnape.palatable.lambda.monoid.builtin |
  com.jnape.palatable.lambda.semigroup |
  com.jnape.palatable.lambda.semigroup.builtin |

- - ### Uses of Semigroup in com.jnape.palatable.lambda.functions.specialized

    Methods in com.jnape.palatable.lambda.functions.specialized that return Semigroup
    Modifier and Type | Method and Description
    --- | ---
    `default Semigroup<B>` | SemigroupFactory.`apply(A a)`
    `default Semigroup<C>` | BiSemigroupFactory.`apply(A a, B b)`
    `Semigroup<B>` | SemigroupFactory.`checkedApply(A a)`
    `Semigroup<C>` | BiSemigroupFactory.`checkedApply(A a, B b)`

  - ### Uses of Semigroup in com.jnape.palatable.lambda.monoid

    Subinterfaces of Semigroup in com.jnape.palatable.lambda.monoid
    Modifier and Type | Interface and Description
    --- | ---
    `interface` | `Monoid<A>` A `Monoid` is the pairing of a `Semigroup` with an identity element.

    Methods in com.jnape.palatable.lambda.monoid with parameters of type Semigroup
    Modifier and Type | Method and Description
    --- | ---
    `static <A> Monoid<A>` | Monoid.`monoid(Semigroup<A> semigroup, A identity)` Promote a `Semigroup` to a `Monoid` by supplying an identity element.
    `static <A> Monoid<A>` | Monoid.`monoid(Semigroup<A> semigroup, Fn0<A> identityFn0)`

  - ### Uses of Semigroup in com.jnape.palatable.lambda.monoid.builtin

    Classes in com.jnape.palatable.lambda.monoid.builtin that implement Semigroup
    Modifier and Type | Class and Description
    --- | ---
    `class` | `And` A `Monoid` instance formed by `Boolean`.
    `class` | `Concat<A>` The `Monoid` instance formed under concatenation for an arbitrary `Iterable`.
    `class` | `Endo<A>` A `Monoid` formed by `Fn1` under composition.
    `class` | `First<A>` A `Monoid` instance formed by ``Maybe`<A>`.
    `class` | `Join` A `Monoid` instance formed by `String` that concats two strings together.
    `class` | `Last<A>` A `Monoid` instance formed by ``Maybe`<A>`.
    `class` | `Or` A `Monoid` instance formed by `Boolean`.
    `class` | `PutAll` A `Monoid` instance formed by `HMap` that simply combines all the mappings.
    `class` | `Trivial` The trivial `Unit` `Monoid` formed under `constantly`.
    `class` | `Union<A>` Given two `Iterables` `xs` and `ys`, return the `concatenation` of the `distinct` elements of both `xs` and `ys`.
    `class` | `Xor` Logical exclusive-or.

    Methods in com.jnape.palatable.lambda.monoid.builtin that return types with arguments of type Semigroup
    Modifier and Type | Method and Description
    --- | ---
    `static <K,V> MonoidFactory<Semigroup<V>,Map<K,V>>` | MergeMaps.`mergeMaps(Fn0<Map<K,V>> mFn0)`

    Methods in com.jnape.palatable.lambda.monoid.builtin with parameters of type Semigroup
    Modifier and Type | Method and Description
    --- | ---
    `Monoid<Map<K,V>>` | MergeMaps.`checkedApply(Fn0<Map<K,V>> mFn0, Semigroup<V> semigroup)`
    `Monoid<Maybe<A>>` | Present.`checkedApply(Semigroup<A> aSemigroup)`
    `Monoid<Either<L,R>>` | Merge.`checkedApply(Semigroup<L> lSemigroup, Monoid<R> rMonoid)`
    `static <L,R> MonoidFactory<Monoid<R>,Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup)`
    `static <L,R> Monoid<Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup, Monoid<R> rMonoid)`
    `static <L,R> Fn1<Either<L,R>,Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup, Monoid<R> rMonoid, Either<L,R> x)`
    `static <L,R> Either<L,R>` | Merge.`merge(Semigroup<L> lSemigroup, Monoid<R> rMonoid, Either<L,R> x, Either<L,R> y)`
    `static <K,V> Monoid<Map<K,V>>` | MergeMaps.`mergeMaps(Fn0<Map<K,V>> mFn0, Semigroup<V> semigroup)`
    `static <K,V> Fn1<Map<K,V>,Map<K,V>>` | MergeMaps.`mergeMaps(Fn0<Map<K,V>> mFn0, Semigroup<V> semigroup, Map<K,V> x)`
    `static <K,V> Map<K,V>` | MergeMaps.`mergeMaps(Fn0<Map<K,V>> mFn0, Semigroup<V> semigroup, Map<K,V> x, Map<K,V> y)`
    `static <A> Monoid<Maybe<A>>` | Present.`present(Semigroup<A> semigroup)`
    `static <A> Fn1<Maybe<A>,Maybe<A>>` | Present.`present(Semigroup<A> aSemigroup, Maybe<A> x)`
    `static <A> Maybe<A>` | Present.`present(Semigroup<A> semigroup, Maybe<A> x, Maybe<A> y)`

  - ### Uses of Semigroup in com.jnape.palatable.lambda.semigroup

    Methods in com.jnape.palatable.lambda.semigroup that return Semigroup
    Modifier and Type | Method and Description
    --- | ---
    `default Semigroup<A>` | Semigroup.`flip()` Flip the order of the arguments.

  - ### Uses of Semigroup in com.jnape.palatable.lambda.semigroup.builtin

    Classes in com.jnape.palatable.lambda.semigroup.builtin that implement Semigroup
    Modifier and Type | Class and Description
    --- | ---
    `class` | `Intersection<A>` Given two `Iterables` `xs` and `ys`, return the `distinct` elements of `xs` that are also in `ys` in order of their unique occurrence in `xs`.
    `class` | `Max<A extends Comparable<A>>` A `Semigroup` over `A` that chooses between two values `x` and `y` via the following rules: If `x` is strictly less than `y`, return `y` Otherwise, return `x`
    `class` | `Min<A extends Comparable<A>>` A `Semigroup` over `A` that chooses between two values `x` and `y` via the following rules: If `x` is strictly greater than `y`, return `y` Otherwise, return `x`

    Methods in com.jnape.palatable.lambda.semigroup.builtin that return Semigroup
    Modifier and Type | Method and Description
    --- | ---
    `static <A> Semigroup<Maybe<A>>` | Absent.`absent(Semigroup<A> semigroup)`
    `Semigroup<A>` | MinBy.`checkedApply(Fn1<? super A,? extends B> compareFn)`
    `Semigroup<A>` | MaxBy.`checkedApply(Fn1<? super A,? extends B> compareFn)`
    `Semigroup<Tuple2<_1,_2>>` | Collapse.`checkedApply(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup)`
    `Semigroup<IO<A>>` | RunAll.`checkedApply(Semigroup<A> semigroup)`
    `Semigroup<CompletableFuture<A>>` | Compose.`checkedApply(Semigroup<A> aSemigroup)`
    `Semigroup<Maybe<A>>` | Absent.`checkedApply(Semigroup<A> aSemigroup)`
    `Semigroup<Either<L,R>>` | LeftAny.`checkedApply(Semigroup<L> lSemigroup)`
    `Semigroup<Either<L,R>>` | LeftAll.`checkedApply(Semigroup<L> lSemigroup)`
    `Semigroup<Either<L,R>>` | Merge.`checkedApply(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup)`
    `Semigroup<Either<L,R>>` | RightAll.`checkedApply(Semigroup<R> rSemigroup)`
    `Semigroup<Either<L,R>>` | RightAny.`checkedApply(Semigroup<R> rSemigroup)`
    `static <_1,_2> Semigroup<Tuple2<_1,_2>>` | Collapse.`collapse(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup)`
    `static <A> Semigroup<CompletableFuture<A>>` | Compose.`compose(Semigroup<A> aSemigroup)`
    `static <L,R> Semigroup<Either<L,R>>` | LeftAll.`leftAll(Semigroup<L> lSemigroup)`
    `static <L,R> Semigroup<Either<L,R>>` | LeftAny.`leftAny(Semigroup<L> lSemigroup)`
    `static <A,B extends Comparable<B>> Semigroup<A>` | MaxBy.`maxBy(Fn1<? super A,? extends B> compareFn)`
    `static <L,R> Semigroup<Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup)`
    `static <A,B extends Comparable<B>> Semigroup<A>` | MinBy.`minBy(Fn1<? super A,? extends B> compareFn)`
    `static <L,R> Semigroup<Either<L,R>>` | RightAll.`rightAll(Semigroup<R> rSemigroup)`
    `static <L,R> Semigroup<Either<L,R>>` | RightAny.`rightAny(Semigroup<R> rSemigroup)`
    `static <A> Semigroup<IO<A>>` | RunAll.`runAll(Semigroup<A> semigroup)`

    Methods in com.jnape.palatable.lambda.semigroup.builtin that return types with arguments of type Semigroup
    Modifier and Type | Method and Description
    --- | ---
    `static <_1,_2> SemigroupFactory<Semigroup<_2>,Tuple2<_1,_2>>` | Collapse.`collapse(Semigroup<_1> _1Semigroup)`
    `static <L,R> SemigroupFactory<Semigroup<R>,Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup)`

    Methods in com.jnape.palatable.lambda.semigroup.builtin with parameters of type Semigroup
    Modifier and Type | Method and Description
    --- | ---
    `static <A> Semigroup<Maybe<A>>` | Absent.`absent(Semigroup<A> semigroup)`
    `static <A> Fn1<Maybe<A>,Maybe<A>>` | Absent.`absent(Semigroup<A> aSemigroup, Maybe<A> x)`
    `static <A> Maybe<A>` | Absent.`absent(Semigroup<A> semigroup, Maybe<A> x, Maybe<A> y)`
    `Semigroup<Tuple2<_1,_2>>` | Collapse.`checkedApply(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup)`
    `Semigroup<Tuple2<_1,_2>>` | Collapse.`checkedApply(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup)`
    `Semigroup<IO<A>>` | RunAll.`checkedApply(Semigroup<A> semigroup)`
    `Semigroup<CompletableFuture<A>>` | Compose.`checkedApply(Semigroup<A> aSemigroup)`
    `Semigroup<Maybe<A>>` | Absent.`checkedApply(Semigroup<A> aSemigroup)`
    `Semigroup<Either<L,R>>` | LeftAny.`checkedApply(Semigroup<L> lSemigroup)`
    `Semigroup<Either<L,R>>` | LeftAll.`checkedApply(Semigroup<L> lSemigroup)`
    `Semigroup<Either<L,R>>` | Merge.`checkedApply(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup)`
    `Semigroup<Either<L,R>>` | Merge.`checkedApply(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup)`
    `Semigroup<Either<L,R>>` | RightAll.`checkedApply(Semigroup<R> rSemigroup)`
    `Semigroup<Either<L,R>>` | RightAny.`checkedApply(Semigroup<R> rSemigroup)`
    `static <_1,_2> SemigroupFactory<Semigroup<_2>,Tuple2<_1,_2>>` | Collapse.`collapse(Semigroup<_1> _1Semigroup)`
    `static <_1,_2> Semigroup<Tuple2<_1,_2>>` | Collapse.`collapse(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup)`
    `static <_1,_2> Semigroup<Tuple2<_1,_2>>` | Collapse.`collapse(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup)`
    `static <_1,_2> Fn1<Tuple2<_1,_2>,Tuple2<_1,_2>>` | Collapse.`collapse(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup, Tuple2<_1,_2> x)`
    `static <_1,_2> Fn1<Tuple2<_1,_2>,Tuple2<_1,_2>>` | Collapse.`collapse(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup, Tuple2<_1,_2> x)`
    `static <_1,_2> Tuple2<_1,_2>` | Collapse.`collapse(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup, Tuple2<_1,_2> x, Tuple2<_1,_2> y)`
    `static <_1,_2> Tuple2<_1,_2>` | Collapse.`collapse(Semigroup<_1> _1Semigroup, Semigroup<_2> _2Semigroup, Tuple2<_1,_2> x, Tuple2<_1,_2> y)`
    `static <A> Semigroup<CompletableFuture<A>>` | Compose.`compose(Semigroup<A> aSemigroup)`
    `static <A> Fn1<CompletableFuture<A>,CompletableFuture<A>>` | Compose.`compose(Semigroup<A> aSemigroup, CompletableFuture<A> x)`
    `static <A> CompletableFuture<A>` | Compose.`compose(Semigroup<A> aSemigroup, CompletableFuture<A> x, CompletableFuture<A> y)`
    `static <L,R> Semigroup<Either<L,R>>` | LeftAll.`leftAll(Semigroup<L> lSemigroup)`
    `static <L,R> Fn1<Either<L,R>,Either<L,R>>` | LeftAll.`leftAll(Semigroup<L> lSemigroup, Either<L,R> x)`
    `static <L,R> Either<L,R>` | LeftAll.`leftAll(Semigroup<L> lSemigroup, Either<L,R> x, Either<L,R> y)`
    `static <L,R> Semigroup<Either<L,R>>` | LeftAny.`leftAny(Semigroup<L> lSemigroup)`
    `static <L,R> Fn1<Either<L,R>,Either<L,R>>` | LeftAny.`leftAny(Semigroup<L> lSemigroup, Either<L,R> x)`
    `static <L,R> Either<L,R>` | LeftAny.`leftAny(Semigroup<L> lSemigroup, Either<L,R> x, Either<L,R> y)`
    `static <L,R> SemigroupFactory<Semigroup<R>,Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup)`
    `static <L,R> Semigroup<Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup)`
    `static <L,R> Semigroup<Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup)`
    `static <L,R> Fn1<Either<L,R>,Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup, Either<L,R> x)`
    `static <L,R> Fn1<Either<L,R>,Either<L,R>>` | Merge.`merge(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup, Either<L,R> x)`
    `static <L,R> Either<L,R>` | Merge.`merge(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup, Either<L,R> x, Either<L,R> y)`
    `static <L,R> Either<L,R>` | Merge.`merge(Semigroup<L> lSemigroup, Semigroup<R> rSemigroup, Either<L,R> x, Either<L,R> y)`
    `static <L,R> Semigroup<Either<L,R>>` | RightAll.`rightAll(Semigroup<R> rSemigroup)`
    `static <L,R> Fn1<Either<L,R>,Either<L,R>>` | RightAll.`rightAll(Semigroup<R> rSemigroup, Either<L,R> x)`
    `static <L,R> Either<L,R>` | RightAll.`rightAll(Semigroup<R> rSemigroup, Either<L,R> x, Either<L,R> y)`
    `static <L,R> Semigroup<Either<L,R>>` | RightAny.`rightAny(Semigroup<R> rSemigroup)`
    `static <L,R> Fn1<Either<L,R>,Either<L,R>>` | RightAny.`rightAny(Semigroup<R> rSemigroup, Either<L,R> x)`
    `static <L,R> Either<L,R>` | RightAny.`rightAny(Semigroup<R> rSemigroup, Either<L,R> x, Either<L,R> y)`
    `static <A> Semigroup<IO<A>>` | RunAll.`runAll(Semigroup<A> semigroup)`
    `static <A> Fn1<IO<A>,IO<A>>` | RunAll.`runAll(Semigroup<A> semigroup, IO<A> ioX)`
    `static <A> IO<A>` | RunAll.`runAll(Semigroup<A> semigroup, IO<A> ioX, IO<A> ioY)`