Copyright 2008 - 2009 Tony Morris, Runar Bjarnason, Tom Adams, Brad Clow, Ricky Clarkson, Nick Partridge, Jason Zaugg

This software is released under an open source BSD licence.

fj.pre
Class Semigroup<A>

java.lang.Object
  extended by fj.pre.Semigroup<A>

public final class Semigroup<A>
extends Object

Implementations must satisfy the law of associativity:


Field Summary
static Semigroup<BigDecimal> bigdecimalAdditionSemigroup
          A semigroup that adds big decimals.
static Semigroup<BigDecimal> bigDecimalMaximumSemigroup
          A semigroup that yields the maximum of big decimals.
static Semigroup<BigDecimal> bigDecimalMinimumSemigroup
          A semigroup that yields the minimum of big decimals.
static Semigroup<BigDecimal> bigdecimalMultiplicationSemigroup
          A semigroup that multiplies big decimals.
static Semigroup<BigInteger> bigintAdditionSemigroup
          A semigroup that adds big integers.
static Semigroup<BigInteger> bigintMaximumSemigroup
          A semigroup that yields the maximum of big integers.
static Semigroup<BigInteger> bigintMinimumSemigroup
          A semigroup that yields the minimum of big integers.
static Semigroup<BigInteger> bigintMultiplicationSemigroup
          A semigroup that multiplies big integers.
static Semigroup<Boolean> conjunctionSemigroup
          A semigroup that ANDs booleans.
static Semigroup<Boolean> disjunctionSemigroup
          A semigroup that ORs booleans.
static Semigroup<Boolean> exclusiveDisjunctionSemiGroup
          A semigroup that XORs booleans.
static Semigroup<Integer> intAdditionSemigroup
          A semigroup that adds integers.
static Semigroup<Integer> intMaximumSemigroup
          A semigroup that yields the maximum of integers.
static Semigroup<Integer> intMinimumSemigroup
          A semigroup that yields the minimum of integers.
static Semigroup<Integer> intMultiplicationSemigroup
          A semigroup that multiplies integers.
static Semigroup<Long> longAdditionSemigroup
          A semigroup that adds longs.
static Semigroup<Long> longMaximumSemigroup
          A semigroup that yields the maximum of longs.
static Semigroup<Long> longMinimumSemigroup
          A semigroup that yields the minimum of longs.
static Semigroup<Long> longMultiplicationSemigroup
          A semigroup that multiplies longs.
static Semigroup<Natural> naturalAdditionSemigroup
          A semigroup that multiplies 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<StringBuffer> stringBufferSemigroup
          A semigroup that appends string buffers.
static Semigroup<StringBuilder> stringBuilderSemigroup
          A semigroup that appends string builders.
static Semigroup<String> stringSemigroup
          A semigroup that appends strings.
static Semigroup<Unit> unitSemigroup
          A semigroup for the Unit value.
 
Method Summary
static
<A> Semigroup<Array<A>>
arraySemigroup()
          A semigroup for arrays.
static
<A,B> Semigroup<F<A,B>>
functionSemigroup(Semigroup<B> sb)
          A semigroup for functions.
static
<A> Semigroup<List<A>>
listSemigroup()
          A semigroup for lists.
static
<A> Semigroup<NonEmptyList<A>>
nonEmptyListSemigroup()
          A semigroup for non-empty lists.
static
<A> Semigroup<Option<A>>
optionSemigroup()
          A semigroup for optional values.
static
<A> Semigroup<P1<A>>
p1Semigroup(Semigroup<A> sa)
          A semigroup for unary products.
static
<A,B> Semigroup<P2<A,B>>
p2Semigroup(Semigroup<A> sa, Semigroup<B> sb)
          A 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<Set<A>>
setSemigroup()
          A 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.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

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 multiplies 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.

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.

semigroup

public static <A> Semigroup<A> semigroup(F<A,F<A,A>> sum)
Constructs a semigroup from the given function.

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.

Parameters:
sum - The function to construct this semigroup with.
Returns:
A semigroup from the given function.

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.

optionSemigroup

public static <A> Semigroup<Option<A>> optionSemigroup()
A semigroup for optional values.

Returns:
A semigroup for optional values.

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

setSemigroup

public static <A> Semigroup<Set<A>> setSemigroup()
A semigroup for sets.

Returns:
a semigroup for sets.

Copyright 2008 - 2009 Tony Morris, Runar Bjarnason, Tom Adams, Brad Clow, Ricky Clarkson, Nick Partridge, Jason Zaugg

This software is released under an open source BSD licence.