package fj; import static fj.Function.curry; import static fj.Function.compose; import static fj.Function.flip; import fj.data.Array; import fj.data.List; import fj.data.Natural; import fj.data.Option; import fj.data.Set; import fj.data.Stream; import static fj.data.Stream.iterableStream; import java.math.BigInteger; import java.math.BigDecimal; /** * A monoid abstraction to be defined across types of the given type argument. Implementations must * follow the monoidal laws: *