Skip to content

Commit e3bf125

Browse files
committed
Add min and max Semigroup instances for Ords
1 parent 30da36c commit e3bf125

File tree

2 files changed

+20
-11
lines changed

2 files changed

+20
-11
lines changed

core/src/main/java/fj/Ord.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import java.util.Comparator;
1616

1717
import static fj.Function.curry;
18+
import static fj.Semigroup.semigroup;
1819

1920
/**
2021
* Tests for ordering between two objects.
@@ -157,7 +158,15 @@ public A min(final A a1, final A a2) {
157158
*/
158159
public final F<A, F<A, A>> min = curry(this::min);
159160

160-
public Ord<A> reverse() { return ord(Function.flip(f)); }
161+
public final Semigroup<A> minSemigroup() {
162+
return semigroup(this::min);
163+
}
164+
165+
public final Semigroup<A> maxSemigroup() {
166+
return semigroup(this::max);
167+
}
168+
169+
public final Ord<A> reverse() { return ord(Function.flip(f)); }
161170

162171
/**
163172
* Returns an order instance that uses the given equality test and ordering function.

core/src/main/java/fj/Semigroup.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -147,12 +147,12 @@ public static <A> Semigroup<A> semigroup(final F2<A, A, A> sum) {
147147
/**
148148
* A semigroup that yields the maximum of integers.
149149
*/
150-
public static final Semigroup<Integer> intMaximumSemigroup = semigroup(Ord.intOrd.max);
150+
public static final Semigroup<Integer> intMaximumSemigroup = Ord.intOrd.maxSemigroup();
151151

152152
/**
153153
* A semigroup that yields the minimum of integers.
154154
*/
155-
public static final Semigroup<Integer> intMinimumSemigroup = semigroup(Ord.intOrd.min);
155+
public static final Semigroup<Integer> intMinimumSemigroup = Ord.intOrd.minSemigroup();
156156

157157
/**
158158
* A semigroup that adds big integers.
@@ -169,12 +169,12 @@ public static <A> Semigroup<A> semigroup(final F2<A, A, A> sum) {
169169
/**
170170
* A semigroup that yields the maximum of big integers.
171171
*/
172-
public static final Semigroup<BigInteger> bigintMaximumSemigroup = semigroup(Ord.bigintOrd.max);
172+
public static final Semigroup<BigInteger> bigintMaximumSemigroup = Ord.bigintOrd.maxSemigroup();
173173

174174
/**
175175
* A semigroup that yields the minimum of big integers.
176176
*/
177-
public static final Semigroup<BigInteger> bigintMinimumSemigroup = semigroup(Ord.bigintOrd.min);
177+
public static final Semigroup<BigInteger> bigintMinimumSemigroup = Ord.bigintOrd.minSemigroup();
178178

179179
/**
180180
* A semigroup that adds big decimals.
@@ -191,12 +191,12 @@ public static <A> Semigroup<A> semigroup(final F2<A, A, A> sum) {
191191
/**
192192
* A semigroup that yields the maximum of big decimals.
193193
*/
194-
public static final Semigroup<BigDecimal> bigDecimalMaximumSemigroup = semigroup(Ord.bigdecimalOrd.max);
194+
public static final Semigroup<BigDecimal> bigDecimalMaximumSemigroup = Ord.bigdecimalOrd.maxSemigroup();
195195

196196
/**
197197
* A semigroup that yields the minimum of big decimals.
198198
*/
199-
public static final Semigroup<BigDecimal> bigDecimalMinimumSemigroup = semigroup(Ord.bigdecimalOrd.min);
199+
public static final Semigroup<BigDecimal> bigDecimalMinimumSemigroup = Ord.bigdecimalOrd.minSemigroup();
200200

201201
/**
202202
* A semigroup that multiplies natural numbers.
@@ -213,12 +213,12 @@ public static <A> Semigroup<A> semigroup(final F2<A, A, A> sum) {
213213
/**
214214
* A semigroup that yields the maximum of natural numbers.
215215
*/
216-
public static final Semigroup<Natural> naturalMaximumSemigroup = semigroup(Ord.naturalOrd.max);
216+
public static final Semigroup<Natural> naturalMaximumSemigroup = Ord.naturalOrd.maxSemigroup();
217217

218218
/**
219219
* A semigroup that yields the minimum of natural numbers.
220220
*/
221-
public static final Semigroup<Natural> naturalMinimumSemigroup = semigroup(Ord.naturalOrd.min);
221+
public static final Semigroup<Natural> naturalMinimumSemigroup = Ord.naturalOrd.minSemigroup();
222222

223223
/**
224224
* A semigroup that adds longs.
@@ -233,12 +233,12 @@ public static <A> Semigroup<A> semigroup(final F2<A, A, A> sum) {
233233
/**
234234
* A semigroup that yields the maximum of longs.
235235
*/
236-
public static final Semigroup<Long> longMaximumSemigroup = semigroup(Ord.longOrd.max);
236+
public static final Semigroup<Long> longMaximumSemigroup = Ord.longOrd.maxSemigroup();
237237

238238
/**
239239
* A semigroup that yields the minimum of longs.
240240
*/
241-
public static final Semigroup<Long> longMinimumSemigroup = semigroup(Ord.longOrd.min);
241+
public static final Semigroup<Long> longMinimumSemigroup = Ord.longOrd.minSemigroup();
242242

243243
/**
244244
* A semigroup that ORs booleans.

0 commit comments

Comments
 (0)