Package fj
Class Semigroup<A>
- java.lang.Object
-
- fj.Semigroup<A>
-
public final class Semigroup<A> extends java.lang.ObjectImplementations must satisfy the law of associativity:- Associativity; forall x. forall y. forall z. sum(sum(x, y), z) == sum(x, sum(y, z))
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interfaceSemigroup.AltDefinition<A>Primitives functions of Semigroup: alternative minimal definition and overridable methods.static interfaceSemigroup.Definition<A>Primitives functions of Semigroup: minimal definition and overridable methods.
-
Field Summary
Fields Modifier and Type Field Description static Semigroup<java.math.BigDecimal>bigdecimalAdditionSemigroupA semigroup that adds big decimals.static Semigroup<java.math.BigDecimal>bigDecimalMaximumSemigroupA semigroup that yields the maximum of big decimals.static Semigroup<java.math.BigDecimal>bigDecimalMinimumSemigroupA semigroup that yields the minimum of big decimals.static Semigroup<java.math.BigDecimal>bigdecimalMultiplicationSemigroupA semigroup that multiplies big decimals.static Semigroup<java.math.BigInteger>bigintAdditionSemigroupA semigroup that adds big integers.static Semigroup<java.math.BigInteger>bigintMaximumSemigroupA semigroup that yields the maximum of big integers.static Semigroup<java.math.BigInteger>bigintMinimumSemigroupA semigroup that yields the minimum of big integers.static Semigroup<java.math.BigInteger>bigintMultiplicationSemigroupA semigroup that multiplies big integers.static Semigroup<java.lang.Boolean>conjunctionSemigroupA semigroup that ANDs booleans.private Semigroup.Definition<A>defstatic Semigroup<java.lang.Boolean>disjunctionSemigroupA semigroup that ORs booleans.static Semigroup<java.lang.Boolean>exclusiveDisjunctionSemiGroupA semigroup that XORs booleans.static Semigroup<java.lang.Integer>intAdditionSemigroupA semigroup that adds integers.static Semigroup<java.lang.Integer>intMaximumSemigroupA semigroup that yields the maximum of integers.static Semigroup<java.lang.Integer>intMinimumSemigroupA semigroup that yields the minimum of integers.static Semigroup<java.lang.Integer>intMultiplicationSemigroupA semigroup that multiplies integers.static Semigroup<java.lang.Long>longAdditionSemigroupA semigroup that adds longs.static Semigroup<java.lang.Long>longMaximumSemigroupA semigroup that yields the maximum of longs.static Semigroup<java.lang.Long>longMinimumSemigroupA semigroup that yields the minimum of longs.static Semigroup<java.lang.Long>longMultiplicationSemigroupA semigroup that multiplies longs.static Semigroup<Natural>naturalAdditionSemigroupA semigroup that adds natural numbers.static Semigroup<Natural>naturalMaximumSemigroupA semigroup that yields the maximum of natural numbers.static Semigroup<Natural>naturalMinimumSemigroupA semigroup that yields the minimum of natural numbers.static Semigroup<Natural>naturalMultiplicationSemigroupA semigroup that multiplies natural numbers.static Semigroup<java.lang.StringBuffer>stringBufferSemigroupA semigroup that appends string buffers.static Semigroup<java.lang.StringBuilder>stringBuilderSemigroupA semigroup that appends string builders.static Semigroup<java.lang.String>stringSemigroupA semigroup that appends strings.static Semigroup<Unit>unitSemigroupA semigroup for the Unit value.
-
Constructor Summary
Constructors Modifier Constructor Description privateSemigroup(Semigroup.Definition<A> def)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static <A> Semigroup<Array<A>>arraySemigroup()A semigroup for arrays.<B,C>
Semigroup<C>compose(Semigroup<B> sb, F<C,B> b, F<C,A> a, F2<A,B,C> c)Semigroup<A>dual()Swaps the arguments when summing.static <A> Semigroup<Option<A>>firstOptionSemigroup()A semigroup for optional values that take the first available value.static <A> Semigroup<A>firstSemigroup()A semigroup which always uses the "first" (left-hand side) value.static <A,B>
Semigroup<F<A,B>>functionSemigroup(Semigroup<B> sb)A semigroup for functions.static <A> Semigroup<IO<A>>ioSemigroup(Semigroup<A> sa)A semigroup for IO values.static <A> Semigroup<Option<A>>lastOptionSemigroup()A semigroup for optional values that take the last available value.static <A> Semigroup<A>lastSemigroup()A semigroup which always uses the "last" (right-hand side) value.Monoid<Option<A>>lift()Lifts the semigroup to obtain a trivial monoid.static <A> Semigroup<List<A>>listSemigroup()A semigroup for lists.Monoid<A>monoid(A zero)Constructs a monoid from this semigroup and a zero value, which must follow the monoidal laws.Amultiply1p(int n, A a)Returns a value summedn + 1times (a + a + ...static <A> Semigroup<NonEmptyList<A>>nonEmptyListSemigroup()A semigroup for non-empty lists.static <A> Semigroup<P1<A>>p1Semigroup(Semigroup<A> sa)A lazy semigroup for unary products.static <A,B>
Semigroup<P2<A,B>>p2Semigroup(Semigroup<A> sa, Semigroup<B> sb)A lazy semigroup for binary products.static <A> Semigroup<A>semigroup(F<A,F<A,A>> sum)Constructs a semigroup from the given function.static <A> Semigroup<A>semigroup(F2<A,A,A> sum)Constructs a semigroup from the given function.static <A> Semigroup<A>semigroupDef(Semigroup.AltDefinition<A> def)Constructs a semigroup from the given definition.static <A> Semigroup<A>semigroupDef(Semigroup.Definition<A> def)Constructs a semigroup from the given definition.static <A> Semigroup<Set<A>>setIntersectionSemigroup()A intersection semigroup for sets.static <A> Semigroup<Set<A>>setSemigroup()A union semigroup for sets.static <A> Semigroup<Stream<A>>streamSemigroup()A semigroup for streams.F<A,F<A,A>>sum()Returns a function that sums according to this semigroup.F<A,A>sum(A a1)Returns a function that sums the given value according to this semigroup.Asum(A a1, A a2)Sums the two given arguments.AsumNel(NonEmptyList<A> as)Sums the given values with left-fold.AsumStream(A a, F0<Stream<A>> as)Sums the given values with left-fold, shortcutting the computation as early as possible.<B> Semigroup<B>xmap(F<A,B> f, F<B,A> g)Maps the given functions across this monoid as an invariant functor.
-
-
-
Field Detail
-
def
private final Semigroup.Definition<A> def
-
intAdditionSemigroup
public static final Semigroup<java.lang.Integer> intAdditionSemigroup
A semigroup that adds integers.
-
intMultiplicationSemigroup
public static final Semigroup<java.lang.Integer> intMultiplicationSemigroup
A semigroup that multiplies integers.
-
intMaximumSemigroup
public static final Semigroup<java.lang.Integer> intMaximumSemigroup
A semigroup that yields the maximum of integers.
-
intMinimumSemigroup
public static final Semigroup<java.lang.Integer> intMinimumSemigroup
A semigroup that yields the minimum of integers.
-
bigintAdditionSemigroup
public static final Semigroup<java.math.BigInteger> bigintAdditionSemigroup
A semigroup that adds big integers.
-
bigintMultiplicationSemigroup
public static final Semigroup<java.math.BigInteger> bigintMultiplicationSemigroup
A semigroup that multiplies big integers.
-
bigintMaximumSemigroup
public static final Semigroup<java.math.BigInteger> bigintMaximumSemigroup
A semigroup that yields the maximum of big integers.
-
bigintMinimumSemigroup
public static final Semigroup<java.math.BigInteger> bigintMinimumSemigroup
A semigroup that yields the minimum of big integers.
-
bigdecimalAdditionSemigroup
public static final Semigroup<java.math.BigDecimal> bigdecimalAdditionSemigroup
A semigroup that adds big decimals.
-
bigdecimalMultiplicationSemigroup
public static final Semigroup<java.math.BigDecimal> bigdecimalMultiplicationSemigroup
A semigroup that multiplies big decimals.
-
bigDecimalMaximumSemigroup
public static final Semigroup<java.math.BigDecimal> bigDecimalMaximumSemigroup
A semigroup that yields the maximum of big decimals.
-
bigDecimalMinimumSemigroup
public static final Semigroup<java.math.BigDecimal> bigDecimalMinimumSemigroup
A semigroup that yields the minimum of big decimals.
-
naturalMultiplicationSemigroup
public static final Semigroup<Natural> naturalMultiplicationSemigroup
A semigroup that multiplies natural numbers.
-
naturalAdditionSemigroup
public static final Semigroup<Natural> naturalAdditionSemigroup
A semigroup that adds natural numbers.
-
naturalMaximumSemigroup
public static final Semigroup<Natural> naturalMaximumSemigroup
A semigroup that yields the maximum of natural numbers.
-
naturalMinimumSemigroup
public static final Semigroup<Natural> naturalMinimumSemigroup
A semigroup that yields the minimum of natural numbers.
-
longAdditionSemigroup
public static final Semigroup<java.lang.Long> longAdditionSemigroup
A semigroup that adds longs.
-
longMultiplicationSemigroup
public static final Semigroup<java.lang.Long> longMultiplicationSemigroup
A semigroup that multiplies longs.
-
longMaximumSemigroup
public static final Semigroup<java.lang.Long> longMaximumSemigroup
A semigroup that yields the maximum of longs.
-
longMinimumSemigroup
public static final Semigroup<java.lang.Long> longMinimumSemigroup
A semigroup that yields the minimum of longs.
-
disjunctionSemigroup
public static final Semigroup<java.lang.Boolean> disjunctionSemigroup
A semigroup that ORs booleans.
-
exclusiveDisjunctionSemiGroup
public static final Semigroup<java.lang.Boolean> exclusiveDisjunctionSemiGroup
A semigroup that XORs booleans.
-
conjunctionSemigroup
public static final Semigroup<java.lang.Boolean> conjunctionSemigroup
A semigroup that ANDs booleans.
-
stringSemigroup
public static final Semigroup<java.lang.String> stringSemigroup
A semigroup that appends strings.
-
stringBufferSemigroup
public static final Semigroup<java.lang.StringBuffer> stringBufferSemigroup
A semigroup that appends string buffers.
-
stringBuilderSemigroup
public static final Semigroup<java.lang.StringBuilder> stringBuilderSemigroup
A semigroup that appends string builders.
-
-
Constructor Detail
-
Semigroup
private Semigroup(Semigroup.Definition<A> def)
-
-
Method Detail
-
sum
public A sum(A a1, A a2)
Sums the two given arguments.- Parameters:
a1- A value to sum with another.a2- A value to sum with another.- Returns:
- The of the two given arguments.
-
sum
public F<A,A> sum(A a1)
Returns a function that sums the given value according to this semigroup.- Parameters:
a1- The value to sum.- Returns:
- A function that sums the given value according to this semigroup.
-
sum
public F<A,F<A,A>> sum()
Returns a function that sums according to this semigroup.- Returns:
- A function that sums according to this semigroup.
-
multiply1p
public A multiply1p(int n, A a)
Returns a value summedn + 1times (a + a + ... + a) The default definition uses peasant multiplication, exploiting associativity to only requireO(log n)uses ofsum(Object, Object).- Parameters:
n- multipliera- the value to be reapeatly summed n + 1 times- Returns:
asummedntimes. Ifn <= 0, returnszero()
-
sumNel
public A sumNel(NonEmptyList<A> as)
Sums the given values with left-fold.
-
sumStream
public A sumStream(A a, F0<Stream<A>> as)
Sums the given values with left-fold, shortcutting the computation as early as possible.
-
xmap
public <B> Semigroup<B> xmap(F<A,B> f, F<B,A> g)
Maps the given functions across this monoid as an invariant functor.- Parameters:
f- The covariant map.g- The contra-variant map.- Returns:
- A new monoid.
-
monoid
public Monoid<A> monoid(A zero)
Constructs a monoid from this semigroup and a zero value, which must follow the monoidal laws.- Parameters:
zero- The zero for the monoid.- Returns:
- A monoid instance that uses the given sun function and zero value.
-
semigroupDef
public static <A> Semigroup<A> semigroupDef(Semigroup.Definition<A> def)
Constructs a semigroup from the given definition.- Parameters:
def- The definition to construct this semigroup with.- Returns:
- A semigroup from the given definition.
-
semigroupDef
public static <A> Semigroup<A> semigroupDef(Semigroup.AltDefinition<A> def)
Constructs a semigroup from the given definition.- Parameters:
def- The definition to construct this semigroup with.- Returns:
- A semigroup from the given definition.
-
semigroup
public static <A> Semigroup<A> semigroup(F<A,F<A,A>> sum)
Constructs a semigroup from the given function. Java 8+ users: usesemigroupDef(AltDefinition)instead.- Parameters:
sum- The function to construct this semigroup with.- Returns:
- A semigroup from the given function.
-
semigroup
public static <A> Semigroup<A> semigroup(F2<A,A,A> sum)
Constructs a semigroup from the given function. Java 8+ users: usesemigroupDef(Definition)instead.- Parameters:
sum- The function to construct this semigroup with.- Returns:
- A semigroup from the given function.
-
firstSemigroup
public static <A> Semigroup<A> firstSemigroup()
A semigroup which always uses the "first" (left-hand side) value.
-
lastSemigroup
public static <A> Semigroup<A> lastSemigroup()
A semigroup which always uses the "last" (right-hand side) value.
-
functionSemigroup
public static <A,B> Semigroup<F<A,B>> functionSemigroup(Semigroup<B> sb)
A semigroup for functions.- Parameters:
sb- The smeigroup for the codomain.- Returns:
- A semigroup for functions.
-
listSemigroup
public static <A> Semigroup<List<A>> listSemigroup()
A semigroup for lists.- Returns:
- A semigroup for lists.
-
nonEmptyListSemigroup
public static <A> Semigroup<NonEmptyList<A>> nonEmptyListSemigroup()
A semigroup for non-empty lists.- Returns:
- A semigroup for non-empty lists.
-
firstOptionSemigroup
public static <A> Semigroup<Option<A>> firstOptionSemigroup()
A semigroup for optional values that take the first available value.- Returns:
- A semigroup for optional values that take the first available value.
-
lastOptionSemigroup
public static <A> Semigroup<Option<A>> lastOptionSemigroup()
A semigroup for optional values that take the last available value.- Returns:
- A semigroup for optional values that take the last available value.
-
streamSemigroup
public static <A> Semigroup<Stream<A>> streamSemigroup()
A semigroup for streams.- Returns:
- A semigroup for streams.
-
arraySemigroup
public static <A> Semigroup<Array<A>> arraySemigroup()
A semigroup for arrays.- Returns:
- A semigroup for arrays.
-
p1Semigroup
public static <A> Semigroup<P1<A>> p1Semigroup(Semigroup<A> sa)
A lazy semigroup for unary products.- Parameters:
sa- A semigroup for the product's type.- Returns:
- A semigroup for unary products.
-
p2Semigroup
public static <A,B> Semigroup<P2<A,B>> p2Semigroup(Semigroup<A> sa, Semigroup<B> sb)
A lazy semigroup for binary products.- Parameters:
sa- A semigroup for the product's first type.sb- A semigroup for the product's second type.- Returns:
- A semigroup for binary products.
-
ioSemigroup
public static <A> Semigroup<IO<A>> ioSemigroup(Semigroup<A> sa)
A semigroup for IO values.
-
setSemigroup
public static <A> Semigroup<Set<A>> setSemigroup()
A union semigroup for sets.- Returns:
- a semigroup for sets.
-
-