Skip to content

Commit 59fa912

Browse files
committed
Convert some classes to records
1 parent eba9e67 commit 59fa912

4 files changed

Lines changed: 30 additions & 54 deletions

File tree

README.md

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -672,24 +672,15 @@ There are three functions that lambda provides that interface directly with lens
672672
Lenses can be easily created. Consider the following `Person` class:
673673

674674
```Java
675-
public final class Person {
676-
private final int age;
675+
public record Person(int age) {
677676

678-
public Person(int age) {
679-
this.age = age;
680-
}
681-
682-
public int getAge() {
683-
return age;
684-
}
677+
public Person setAge(int age) {
678+
return new Person(age);
679+
}
685680

686-
public Person setAge(int age) {
687-
return new Person(age);
688-
}
689-
690-
public Person setAge(LocalDate dob) {
691-
return setAge((int) YEARS.between(dob, LocalDate.now()));
692-
}
681+
public Person setAge(LocalDate dob) {
682+
return setAge((int) YEARS.between(dob, LocalDate.now()));
683+
}
693684
}
694685
```
695686

src/main/java/com/jnape/palatable/lambda/functor/builtin/Exchange.java

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,15 @@
1212
* @param <S> the larger viewing value of an {@link Iso}
1313
* @param <T> the larger viewed value of an {@link Iso}
1414
*/
15-
public final class Exchange<A, B, S, T> implements Profunctor<S, T, Exchange<A, B, ?, ?>> {
16-
private final Fn1<? super S, ? extends A> sa;
17-
private final Fn1<? super B, ? extends T> bt;
18-
19-
public Exchange(Fn1<? super S, ? extends A> sa, Fn1<? super B, ? extends T> bt) {
20-
this.sa = sa;
21-
this.bt = bt;
22-
}
15+
public record Exchange<A, B, S, T>(Fn1<? super S, ? extends A> sa,
16+
Fn1<? super B, ? extends T> bt) implements Profunctor<S, T, Exchange<A, B, ?, ?>> {
2317

2418
/**
2519
* Extract the mapping <code>S -&gt; A</code>.
2620
*
2721
* @return an <code>{@link Fn1}&lt;S, A&gt;</code>
2822
*/
23+
@Override
2924
public Fn1<? super S, ? extends A> sa() {
3025
return sa;
3126
}
@@ -35,6 +30,7 @@ public Exchange(Fn1<? super S, ? extends A> sa, Fn1<? super B, ? extends T> bt)
3530
*
3631
* @return an <code>{@link Fn1}&lt;B, T&gt;</code>
3732
*/
33+
@Override
3834
public Fn1<? super B, ? extends T> bt() {
3935
return bt;
4036
}

src/main/java/com/jnape/palatable/lambda/functor/builtin/Market.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,10 @@
2828
* @param <S> the input that might fail to map to its output
2929
* @param <T> the guaranteed output
3030
*/
31-
public final class Market<A, B, S, T> implements
31+
public record Market<A, B, S, T>(Fn1<? super B, ? extends T> bt, Fn1<? super S, ? extends Either<T, A>> sta) implements
3232
MonadRec<T, Market<A, B, S, ?>>,
3333
Cocartesian<S, T, Market<A, B, ?, ?>> {
3434

35-
private final Fn1<? super B, ? extends T> bt;
36-
private final Fn1<? super S, ? extends Either<T, A>> sta;
37-
3835
public Market(Fn1<? super B, ? extends T> bt, Fn1<? super S, ? extends Either<T, A>> sta) {
3936
this.bt = fn1(bt);
4037
this.sta = fn1(sta);
@@ -45,6 +42,7 @@ public Market(Fn1<? super B, ? extends T> bt, Fn1<? super S, ? extends Either<T,
4542
*
4643
* @return a <code>{@link Fn1}&lt;B, T&gt;</code>
4744
*/
45+
@Override
4846
public Fn1<? super B, ? extends T> bt() {
4947
return bt;
5048
}
@@ -54,6 +52,7 @@ public Market(Fn1<? super B, ? extends T> bt, Fn1<? super S, ? extends Either<T,
5452
*
5553
* @return a <code>{@link Fn1}&lt;S, {@link Either}&lt;T, A&gt;&gt;</code>
5654
*/
55+
@Override
5756
public Fn1<? super S, ? extends Either<T, A>> sta() {
5857
return sta;
5958
}
@@ -72,9 +71,9 @@ public <U> Market<A, B, S, U> pure(U u) {
7271
@Override
7372
public <U> Market<A, B, S, U> flatMap(Fn1<? super T, ? extends Monad<U, Market<A, B, S, ?>>> f) {
7473
return new Market<>(b -> f.apply(bt().apply(b)).<Market<A, B, S, U>>coerce().bt().apply(b),
75-
s -> sta().apply(s).invert()
76-
.flatMap(t -> f.apply(t).<Market<A, B, S, U>>coerce().sta()
77-
.apply(s).invert()).invert());
74+
s -> sta().apply(s).invert()
75+
.flatMap(t -> f.apply(t).<Market<A, B, S, U>>coerce().sta()
76+
.apply(s).invert()).invert());
7877
}
7978

8079
/**
@@ -89,7 +88,7 @@ public <U> Market<A, B, S, U> trampolineM(
8988
trampoline(t -> fn.apply(t).<Market<A, B, S, RecursiveResult<T, U>>>coerce()
9089
.sta.apply(s)
9190
.match(tOrU -> tOrU.match(RecursiveResult::recurse, u -> terminate(left(u))),
92-
a -> terminate(right(a)))),
91+
a -> terminate(right(a)))),
9392
Either::right)));
9493
return new Market<>(bu, sua);
9594
}
@@ -101,7 +100,7 @@ public <U> Market<A, B, S, U> trampolineM(
101100
public <U> Market<A, B, S, U> zip(Applicative<Fn1<? super T, ? extends U>, Market<A, B, S, ?>> appFn) {
102101
Market<A, B, S, Fn1<? super T, ? extends U>> marketF = appFn.coerce();
103102
return new Market<>(b -> marketF.bt().apply(b).apply(bt().apply(b)),
104-
s -> sta().apply(s).invert().zip(marketF.sta().apply(s).invert()).invert());
103+
s -> sta().apply(s).invert().zip(marketF.sta().apply(s).invert()).invert());
105104
}
106105

107106
/**
@@ -118,8 +117,8 @@ public <U> Market<A, B, S, U> fmap(Fn1<? super T, ? extends U> fn) {
118117
@Override
119118
public <C> Market<A, B, Choice2<C, S>, Choice2<C, T>> cocartesian() {
120119
return new Market<>(bt.fmap(Choice2::b),
121-
cs -> cs.fmap(sta).match(c -> left(a(c)),
122-
tOrA -> tOrA.match(t -> left(b(t)), Either::right)));
120+
cs -> cs.fmap(sta).match(c -> left(a(c)),
121+
tOrA -> tOrA.match(t -> left(b(t)), Either::right)));
123122
}
124123

125124
/**

src/test/java/testsupport/assertion/PrismAssert.java

Lines changed: 9 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -59,29 +59,19 @@ private static <S, A, X> Maybe<String> falsify(String label, Fn2<S, A, X> l, Fn2
5959
.apply(cases);
6060
}
6161

62-
private static final class PrismResult<S> {
63-
private final Maybe<S> maybeS;
64-
65-
private PrismResult(Maybe<S> maybeS) {
66-
this.maybeS = maybeS;
67-
}
62+
private record PrismResult<S>(Maybe<S> maybeS) {
6863

6964
@Override
70-
public boolean equals(Object other) {
71-
if (other instanceof PrismResult) {
72-
return maybeS.zip(((PrismResult<?>) other).maybeS.fmap(fn2(Objects::equals))).orElse(true);
65+
public boolean equals(Object other) {
66+
if (other instanceof PrismResult) {
67+
return maybeS.zip(((PrismResult<?>) other).maybeS.fmap(fn2(Objects::equals))).orElse(true);
68+
}
69+
return false;
7370
}
74-
return false;
75-
}
76-
77-
@Override
78-
public int hashCode() {
79-
return Objects.hash(maybeS);
80-
}
8171

8272
@Override
83-
public String toString() {
84-
return maybeS.toString();
73+
public String toString() {
74+
return maybeS.toString();
75+
}
8576
}
86-
}
8777
}

0 commit comments

Comments
 (0)