Package fj

Class 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))
    • Field Detail

      • 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.
      • unitSemigroup

        public static final Semigroup<Unit> unitSemigroup
        A semigroup for the Unit value.
    • 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 summed n + 1 times ( a + a + ... + a) The default definition uses peasant multiplication, exploiting associativity to only require O(log n) uses of sum(Object, Object).
        Parameters:
        n - multiplier
        a - the value to be reapeatly summed n + 1 times
        Returns:
        a summed n times. If n <= 0, returns zero()
      • 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.
      • dual

        public Semigroup<A> dual()
        Swaps the arguments when summing.
      • lift

        public Monoid<Option<A>> lift()
        Lifts the semigroup to obtain a trivial monoid.
      • 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: use semigroupDef(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: use semigroupDef(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.
      • setIntersectionSemigroup

        public static <A> Semigroup<Set<A>> setIntersectionSemigroup()
        A intersection semigroup for sets.
        Returns:
        a semigroup for sets.