Package fj

Class Semigroup<A>

java.lang.Object
fj.Semigroup<A>

public final class Semigroup<A> extends 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 Details

    • def

      private final Semigroup.Definition<A> def
    • intAdditionSemigroup

      public static final Semigroup<Integer> intAdditionSemigroup
      A semigroup that adds integers.
    • intMultiplicationSemigroup

      public static final Semigroup<Integer> intMultiplicationSemigroup
      A semigroup that multiplies integers.
    • intMaximumSemigroup

      public static final Semigroup<Integer> intMaximumSemigroup
      A semigroup that yields the maximum of integers.
    • intMinimumSemigroup

      public static final Semigroup<Integer> intMinimumSemigroup
      A semigroup that yields the minimum of integers.
    • bigintAdditionSemigroup

      public static final Semigroup<BigInteger> bigintAdditionSemigroup
      A semigroup that adds big integers.
    • bigintMultiplicationSemigroup

      public static final Semigroup<BigInteger> bigintMultiplicationSemigroup
      A semigroup that multiplies big integers.
    • bigintMaximumSemigroup

      public static final Semigroup<BigInteger> bigintMaximumSemigroup
      A semigroup that yields the maximum of big integers.
    • bigintMinimumSemigroup

      public static final Semigroup<BigInteger> bigintMinimumSemigroup
      A semigroup that yields the minimum of big integers.
    • bigdecimalAdditionSemigroup

      public static final Semigroup<BigDecimal> bigdecimalAdditionSemigroup
      A semigroup that adds big decimals.
    • bigdecimalMultiplicationSemigroup

      public static final Semigroup<BigDecimal> bigdecimalMultiplicationSemigroup
      A semigroup that multiplies big decimals.
    • bigDecimalMaximumSemigroup

      public static final Semigroup<BigDecimal> bigDecimalMaximumSemigroup
      A semigroup that yields the maximum of big decimals.
    • bigDecimalMinimumSemigroup

      public static final Semigroup<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<Long> longAdditionSemigroup
      A semigroup that adds longs.
    • longMultiplicationSemigroup

      public static final Semigroup<Long> longMultiplicationSemigroup
      A semigroup that multiplies longs.
    • longMaximumSemigroup

      public static final Semigroup<Long> longMaximumSemigroup
      A semigroup that yields the maximum of longs.
    • longMinimumSemigroup

      public static final Semigroup<Long> longMinimumSemigroup
      A semigroup that yields the minimum of longs.
    • disjunctionSemigroup

      public static final Semigroup<Boolean> disjunctionSemigroup
      A semigroup that ORs booleans.
    • exclusiveDisjunctionSemiGroup

      public static final Semigroup<Boolean> exclusiveDisjunctionSemiGroup
      A semigroup that XORs booleans.
    • conjunctionSemigroup

      public static final Semigroup<Boolean> conjunctionSemigroup
      A semigroup that ANDs booleans.
    • stringSemigroup

      public static final Semigroup<String> stringSemigroup
      A semigroup that appends strings.
    • stringBufferSemigroup

      public static final Semigroup<StringBuffer> stringBufferSemigroup
      A semigroup that appends string buffers.
    • stringBuilderSemigroup

      public static final Semigroup<StringBuilder> stringBuilderSemigroup
      A semigroup that appends string builders.
    • unitSemigroup

      public static final Semigroup<Unit> unitSemigroup
      A semigroup for the Unit value.
  • Constructor Details

  • Method Details

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

      public <B, C> Semigroup<C> compose(Semigroup<B> sb, F<C,B> b, F<C,A> a, F2<A,B,C> c)
    • 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.