Skip to content

Commit 97278b4

Browse files
committed
Introduced F0 interface for lazy values equivalent to P1
1 parent bcf841a commit 97278b4

5 files changed

Lines changed: 27 additions & 24 deletions

File tree

core/src/main/java/fj/F0.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package fj;
2+
3+
/**
4+
* Created by MarkPerry on 21/01/2015.
5+
*/
6+
public interface F0<A> {
7+
8+
public A f();
9+
10+
}

core/src/main/java/fj/P.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -675,15 +675,19 @@ public H _8() {
675675
};
676676
}
677677

678-
public static <A> P1<A> lazy(F<Unit, A> f) {
678+
public static <A> P1<A> lazy(F0<A> f) {
679679
return new P1<A>() {
680680
@Override
681681
public A _1() {
682-
return f.f(unit());
682+
return f.f();
683683
}
684684
};
685685
}
686686

687+
public static <A> P1<A> lazy(F<Unit, A> f) {
688+
return lazy(() -> f.f(unit()));
689+
}
690+
687691
public static <A, B> P2<A, B> lazy(F<Unit, A> fa, F<Unit, B> fb) {
688692
return new P2<A, B>() {
689693
@Override

core/src/main/java/fj/P1.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
import fj.data.Validation;
99
import fj.function.Try0;
1010

11-
public abstract class P1<A> {
11+
public abstract class P1<A> implements F0<A> {
12+
13+
@Override
14+
public A f() {
15+
return _1();
16+
}
1217

1318
/**
1419
* Access the first element of the product.

core/src/main/java/fj/control/parallel/Promise.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,7 @@
11
package fj.control.parallel;
22

3-
import fj.Effect;
4-
import fj.F;
5-
import fj.F2;
6-
import fj.P;
7-
import fj.P1;
8-
import fj.P2;
9-
import fj.Unit;
3+
import fj.*;
4+
105
import static fj.P.p;
116
import static fj.Function.curry;
127
import static fj.Function.identity;
@@ -353,11 +348,7 @@ public static <A, B> F<Stream<A>, Promise<B>> foldRightS(final Strategy<Unit> s,
353348
return new F<Stream<A>, Promise<B>>() {
354349
public Promise<B> f(final Stream<A> as) {
355350
return as.isEmpty() ? promise(s, P.p(b)) : liftM2(f).f(promise(s, P.p(as.head()))).f(
356-
Promise.<P1<B>>join(s, new P1<Promise<P1<B>>>() {
357-
public Promise<P1<B>> _1() {
358-
return f(as.tail()._1()).fmap(P.<B>p1());
359-
}
360-
}));
351+
Promise.<P1<B>>join(s, P.lazy(u -> f(as.tail()._1()).fmap(P.<B>p1()))));
361352
}
362353
};
363354
}

demo/src/main/java/fj/demo/concurrent/MapReduce.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package fj.demo.concurrent;
22

3-
import fj.F;
4-
import fj.F1Functions;
5-
import fj.P1;
6-
import fj.Unit;
3+
import fj.*;
74
import fj.control.parallel.ParModule;
85
import static fj.control.parallel.ParModule.parModule;
96
import fj.control.parallel.Promise;
@@ -58,11 +55,7 @@ public Stream<Character> f(final BufferedReader reader) {
5855
throw new Error(e);
5956
}
6057
if (s.isSome())
61-
return fromString(s.some()).append(new P1<Stream<Character>>() {
62-
public Stream<Character> _1() {
63-
return f(reader);
64-
}
65-
});
58+
return fromString(s.some()).append(P.lazy(sc -> f(reader)));
6659
else {
6760
try {
6861
reader.close();

0 commit comments

Comments
 (0)