Package fj
Class Semigroup<A>
- java.lang.Object
-
- fj.Semigroup<A>
-
public final class Semigroup<A> extends java.lang.Object
Implementations 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 interface
Semigroup.AltDefinition<A>
Primitives functions of Semigroup: alternative minimal definition and overridable methods.static interface
Semigroup.Definition<A>
Primitives functions of Semigroup: minimal definition and overridable methods.
-
Field Summary
Fields Modifier and Type Field Description static Semigroup<java.math.BigDecimal>
bigdecimalAdditionSemigroup
A semigroup that adds big decimals.static Semigroup<java.math.BigDecimal>
bigDecimalMaximumSemigroup
A semigroup that yields the maximum of big decimals.static Semigroup<java.math.BigDecimal>
bigDecimalMinimumSemigroup
A semigroup that yields the minimum of big decimals.static Semigroup<java.math.BigDecimal>
bigdecimalMultiplicationSemigroup
A semigroup that multiplies big decimals.static Semigroup<java.math.BigInteger>
bigintAdditionSemigroup
A semigroup that adds big integers.static Semigroup<java.math.BigInteger>
bigintMaximumSemigroup
A semigroup that yields the maximum of big integers.static Semigroup<java.math.BigInteger>
bigintMinimumSemigroup
A semigroup that yields the minimum of big integers.static Semigroup<java.math.BigInteger>
bigintMultiplicationSemigroup
A semigroup that multiplies big integers.static Semigroup<java.lang.Boolean>
conjunctionSemigroup
A semigroup that ANDs booleans.private Semigroup.Definition<A>
def
static Semigroup<java.lang.Boolean>
disjunctionSemigroup
A semigroup that ORs booleans.static Semigroup<java.lang.Boolean>
exclusiveDisjunctionSemiGroup
A semigroup that XORs booleans.static Semigroup<java.lang.Integer>
intAdditionSemigroup
A semigroup that adds integers.static Semigroup<java.lang.Integer>
intMaximumSemigroup
A semigroup that yields the maximum of integers.static Semigroup<java.lang.Integer>
intMinimumSemigroup
A semigroup that yields the minimum of integers.static Semigroup<java.lang.Integer>
intMultiplicationSemigroup
A semigroup that multiplies integers.static Semigroup<java.lang.Long>
longAdditionSemigroup
A semigroup that adds longs.static Semigroup<java.lang.Long>
longMaximumSemigroup
A semigroup that yields the maximum of longs.static Semigroup<java.lang.Long>
longMinimumSemigroup
A semigroup that yields the minimum of longs.static Semigroup<java.lang.Long>
longMultiplicationSemigroup
A semigroup that multiplies longs.static Semigroup<Natural>
naturalAdditionSemigroup
A semigroup that adds natural numbers.static Semigroup<Natural>
naturalMaximumSemigroup
A semigroup that yields the maximum of natural numbers.static Semigroup<Natural>
naturalMinimumSemigroup
A semigroup that yields the minimum of natural numbers.static Semigroup<Natural>
naturalMultiplicationSemigroup
A semigroup that multiplies natural numbers.static Semigroup<java.lang.StringBuffer>
stringBufferSemigroup
A semigroup that appends string buffers.static Semigroup<java.lang.StringBuilder>
stringBuilderSemigroup
A semigroup that appends string builders.static Semigroup<java.lang.String>
stringSemigroup
A semigroup that appends strings.static Semigroup<Unit>
unitSemigroup
A semigroup for the Unit value.
-
Constructor Summary
Constructors Modifier Constructor Description private
Semigroup(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.A
multiply1p(int n, A a)
Returns a value summedn + 1
times (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.A
sum(A a1, A a2)
Sums the two given arguments.A
sumNel(NonEmptyList<A> as)
Sums the given values with left-fold.A
sumStream(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 + 1
times (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:
a
summedn
times. 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.
-
-