Skip to content

Commit 2885fb9

Browse files
committed
Loosening Pre's requirements on the Profunctor constraint
1 parent c5878f4 commit 2885fb9

1 file changed

Lines changed: 21 additions & 21 deletions

File tree

  • src/main/java/com/jnape/palatable/lambda/optics/functions

src/main/java/com/jnape/palatable/lambda/optics/functions/Pre.java

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.jnape.palatable.lambda.adt.Maybe;
44
import com.jnape.palatable.lambda.functions.Fn1;
55
import com.jnape.palatable.lambda.functions.specialized.Pure;
6+
import com.jnape.palatable.lambda.functor.Profunctor;
67
import com.jnape.palatable.lambda.functor.builtin.Const;
78
import com.jnape.palatable.lambda.optics.Optic;
89
import com.jnape.palatable.lambda.optics.ProtoOptic;
@@ -19,42 +20,41 @@
1920
* @param <A> the result to {@link Maybe maybe} read out
2021
* @param <B> used for unification of the {@link Optic optic's} unused morphism
2122
*/
22-
public final class Pre<S, T, A, B> implements Fn1<Optic<? super Fn1<?, ?>, ? super Const<Maybe<A>, ?>, S, T, A, B>,
23-
Optic<Fn1<?, ?>, Const<Maybe<A>, ?>, S, T, Maybe<A>, B>> {
23+
public final class Pre<P extends Profunctor<?, ?, ? extends P>, S, T, A, B> implements
24+
Fn1<Optic<P, ? super Const<Maybe<A>, ?>, S, T, A, B>,
25+
Optic<P, Const<Maybe<A>, ?>, S, T, Maybe<A>, B>> {
2426

25-
private static final Pre<?, ?, ?, ?> INSTANCE = new Pre<>();
27+
private static final Pre<?, ?, ?, ?, ?> INSTANCE = new Pre<>();
2628

2729
private Pre() {
2830
}
2931

3032
@Override
31-
public Optic<Fn1<?, ?>, Const<Maybe<A>, ?>, S, T, Maybe<A>, B> checkedApply(
32-
Optic<? super Fn1<?, ?>, ? super Const<Maybe<A>, ?>, S, T, A, B> optic) {
33-
Optic<? super Fn1<?, ?>, ? super Const<Maybe<A>, ?>, S, T, Maybe<A>, B> mappedOptic = optic.mapA(Maybe::just);
33+
public Optic<P, Const<Maybe<A>, ?>, S, T, Maybe<A>, B> checkedApply(
34+
Optic<P, ? super Const<Maybe<A>, ?>, S, T, A, B> optic) {
35+
Optic<P, ? super Const<Maybe<A>, ?>, S, T, Maybe<A>, B> mappedOptic = optic.mapA(Maybe::just);
3436
return reframe(mappedOptic);
3537
}
3638

3739
@SuppressWarnings("unchecked")
38-
public static <S, T, A, B> Pre<S, T, A, B> pre() {
39-
return (Pre<S, T, A, B>) INSTANCE;
40+
public static <P extends Profunctor<?, ?, ? extends P>, S, T, A, B> Pre<P, S, T, A, B> pre() {
41+
return (Pre<P, S, T, A, B>) INSTANCE;
4042
}
4143

4244
@SuppressWarnings("overloads")
43-
public static <S, T, A, B> Optic<Fn1<?, ?>, Const<Maybe<A>, ?>, S, T, Maybe<A>, B> pre(
44-
Optic<? super Fn1<?, ?>, ? super Const<Maybe<A>, ?>, S, T, A, B> optic) {
45-
return Pre.<S, T, A, B>pre().apply(optic);
45+
public static <P extends Profunctor<?, ?, ? extends P>, S, T, A, B>
46+
Optic<P, Const<Maybe<A>, ?>, S, T, Maybe<A>, B> pre(Optic<P, ? super Const<Maybe<A>, ?>, S, T, A, B> optic) {
47+
return Pre.<P, S, T, A, B>pre().apply(optic);
4648
}
4749

4850
@SuppressWarnings("overloads")
49-
public static <S, T, A, B> Optic<Fn1<?, ?>, Const<Maybe<A>, ?>, S, T, Maybe<A>, B> pre(
50-
ProtoOptic<? super Fn1<?, ?>, S, T, A, B> protoOptic) {
51-
Optic<? super Fn1<?, ?>, Const<Maybe<A>, ?>, S, T, A, B> optic = protoOptic
52-
.toOptic(new Pure<Const<Maybe<A>, ?>>() {
53-
@Override
54-
public <X> Const<Maybe<A>, X> checkedApply(X x) {
55-
return new Const<>(nothing());
56-
}
57-
});
58-
return pre(optic);
51+
public static <P extends Profunctor<?, ?, ? extends P>, S, T, A, B>
52+
Optic<P, Const<Maybe<A>, ?>, S, T, Maybe<A>, B> pre(ProtoOptic<P, S, T, A, B> protoOptic) {
53+
return pre(protoOptic.toOptic(new Pure<Const<Maybe<A>, ?>>() {
54+
@Override
55+
public <X> Const<Maybe<A>, X> checkedApply(X x) {
56+
return new Const<>(nothing());
57+
}
58+
}));
5959
}
6060
}

0 commit comments

Comments
 (0)