Skip to content

Commit 29bed32

Browse files
committed
Bind + Apply
1 parent 75baa5e commit 29bed32

37 files changed

+200
-114
lines changed

src/main/java/com/jnape/palatable/lambda/adt/Either.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
import com.jnape.palatable.lambda.functions.specialized.checked.CheckedRunnable;
88
import com.jnape.palatable.lambda.functions.specialized.checked.CheckedSupplier;
99
import com.jnape.palatable.lambda.functor.Applicative;
10+
import com.jnape.palatable.lambda.functor.Apply;
1011
import com.jnape.palatable.lambda.functor.Bifunctor;
12+
import com.jnape.palatable.lambda.functor.Bind;
1113
import com.jnape.palatable.lambda.monad.Monad;
1214
import com.jnape.palatable.lambda.traversable.Traversable;
1315

@@ -121,8 +123,8 @@ public final Either<L, R> filter(Function<? super R, Boolean> pred, Function<? s
121123
* @return the Either resulting from applying rightFn to this right value, or this left value if left
122124
*/
123125
@Override
124-
public <R2> Either<L, R2> flatMap(Function<? super R, ? extends Monad<R2, Either<L, ?>>> rightFn) {
125-
return flatMap(Either::left, rightFn.andThen(Applicative::coerce));
126+
public <R2> Either<L, R2> flatMap(Function<? super R, ? extends Bind<R2, Either<L, ?>>> rightFn) {
127+
return flatMap(Either::left, rightFn.andThen(Apply::coerce));
126128
}
127129

128130
/**
@@ -230,7 +232,7 @@ public final <R2> Either<L, R2> pure(R2 r2) {
230232
}
231233

232234
@Override
233-
public final <R2> Either<L, R2> zip(Applicative<Function<? super R, ? extends R2>, Either<L, ?>> appFn) {
235+
public final <R2> Either<L, R2> zip(Apply<Function<? super R, ? extends R2>, Either<L, ?>> appFn) {
234236
return appFn.<Either<L, Function<? super R, ? extends R2>>>coerce().flatMap(this::biMapR);
235237
}
236238

src/main/java/com/jnape/palatable/lambda/adt/Maybe.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.jnape.palatable.lambda.functions.builtin.fn2.Peek;
44
import com.jnape.palatable.lambda.functions.specialized.checked.CheckedSupplier;
55
import com.jnape.palatable.lambda.functor.Applicative;
6+
import com.jnape.palatable.lambda.functor.Apply;
7+
import com.jnape.palatable.lambda.functor.Bind;
68
import com.jnape.palatable.lambda.functor.Functor;
79
import com.jnape.palatable.lambda.monad.Monad;
810
import com.jnape.palatable.lambda.traversable.Traversable;
@@ -115,7 +117,7 @@ public final <B> Maybe<B> fmap(Function<? super A, ? extends B> fn) {
115117
}
116118

117119
@Override
118-
public final <B> Maybe<B> zip(Applicative<Function<? super A, ? extends B>, Maybe> appFn) {
120+
public final <B> Maybe<B> zip(Apply<Function<? super A, ? extends B>, Maybe> appFn) {
119121
return Monad.super.zip(appFn).coerce();
120122
}
121123

@@ -130,7 +132,7 @@ public final <B> Maybe<A> discardR(Applicative<B, Maybe> appB) {
130132
}
131133

132134
@Override
133-
public abstract <B> Maybe<B> flatMap(Function<? super A, ? extends Monad<B, Maybe>> f);
135+
public abstract <B> Maybe<B> flatMap(Function<? super A, ? extends Bind<B, Maybe>> f);
134136

135137
/**
136138
* If this value is present, accept it by <code>consumer</code>; otherwise, do nothing.
@@ -211,7 +213,7 @@ public A orElseGet(Supplier<A> otherSupplier) {
211213
}
212214

213215
@Override
214-
public <B> Maybe<B> flatMap(Function<? super A, ? extends Monad<B, Maybe>> f) {
216+
public <B> Maybe<B> flatMap(Function<? super A, ? extends Bind<B, Maybe>> f) {
215217
return f.apply(a).coerce();
216218
}
217219

@@ -247,7 +249,7 @@ private Nothing() {
247249

248250
@Override
249251
@SuppressWarnings("unchecked")
250-
public <B> Maybe<B> flatMap(Function<? super A, ? extends Monad<B, Maybe>> f) {
252+
public <B> Maybe<B> flatMap(Function<? super A, ? extends Bind<B, Maybe>> f) {
251253
return nothing();
252254
}
253255

src/main/java/com/jnape/palatable/lambda/adt/These.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
import com.jnape.palatable.lambda.adt.coproduct.CoProduct3;
55
import com.jnape.palatable.lambda.adt.hlist.Tuple2;
66
import com.jnape.palatable.lambda.functor.Applicative;
7+
import com.jnape.palatable.lambda.functor.Apply;
78
import com.jnape.palatable.lambda.functor.Bifunctor;
9+
import com.jnape.palatable.lambda.functor.Bind;
810
import com.jnape.palatable.lambda.monad.Monad;
911
import com.jnape.palatable.lambda.traversable.Traversable;
1012

@@ -41,7 +43,7 @@ public final <C, D> These<C, D> biMap(Function<? super A, ? extends C> lFn,
4143
* {@inheritDoc}
4244
*/
4345
@Override
44-
public final <C> These<A, C> flatMap(Function<? super B, ? extends Monad<C, These<A, ?>>> f) {
46+
public final <C> These<A, C> flatMap(Function<? super B, ? extends Bind<C, These<A, ?>>> f) {
4547
return match(These::a, b -> f.apply(b).coerce(), into((a, b) -> f.apply(b).<These<A, C>>coerce().biMapL(constantly(a))));
4648
}
4749

@@ -92,7 +94,7 @@ public final <C> These<A, C> fmap(Function<? super B, ? extends C> fn) {
9294
* {@inheritDoc}
9395
*/
9496
@Override
95-
public final <C> These<A, C> zip(Applicative<Function<? super B, ? extends C>, These<A, ?>> appFn) {
97+
public final <C> These<A, C> zip(Apply<Function<? super B, ? extends C>, These<A, ?>> appFn) {
9698
return Monad.super.zip(appFn).coerce();
9799
}
98100

src/main/java/com/jnape/palatable/lambda/adt/Try.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
import com.jnape.palatable.lambda.functions.specialized.checked.CheckedRunnable;
55
import com.jnape.palatable.lambda.functions.specialized.checked.CheckedSupplier;
66
import com.jnape.palatable.lambda.functor.Applicative;
7+
import com.jnape.palatable.lambda.functor.Apply;
8+
import com.jnape.palatable.lambda.functor.Bind;
79
import com.jnape.palatable.lambda.functor.BoundedBifunctor;
810
import com.jnape.palatable.lambda.monad.Monad;
911
import com.jnape.palatable.lambda.traversable.Traversable;
@@ -143,7 +145,7 @@ public <B> Try<T, B> fmap(Function<? super A, ? extends B> fn) {
143145
}
144146

145147
@Override
146-
public <B> Try<T, B> flatMap(Function<? super A, ? extends Monad<B, Try<T, ?>>> f) {
148+
public <B> Try<T, B> flatMap(Function<? super A, ? extends Bind<B, Try<T, ?>>> f) {
147149
return match(Try::failure, a -> f.apply(a).coerce());
148150
}
149151

@@ -153,7 +155,7 @@ public <B> Try<T, B> pure(B b) {
153155
}
154156

155157
@Override
156-
public <B> Try<T, B> zip(Applicative<Function<? super A, ? extends B>, Try<T, ?>> appFn) {
158+
public <B> Try<T, B> zip(Apply<Function<? super A, ? extends B>, Try<T, ?>> appFn) {
157159
return Monad.super.zip(appFn).coerce();
158160
}
159161

src/main/java/com/jnape/palatable/lambda/adt/choice/Choice2.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.jnape.palatable.lambda.adt.hlist.HList;
77
import com.jnape.palatable.lambda.adt.hlist.Tuple2;
88
import com.jnape.palatable.lambda.functor.Applicative;
9+
import com.jnape.palatable.lambda.functor.Apply;
910
import com.jnape.palatable.lambda.functor.Bifunctor;
11+
import com.jnape.palatable.lambda.functor.Bind;
1012
import com.jnape.palatable.lambda.monad.Monad;
1113
import com.jnape.palatable.lambda.traversable.Traversable;
1214

@@ -82,7 +84,7 @@ public <C> Choice2<A, C> pure(C c) {
8284
}
8385

8486
@Override
85-
public <C> Choice2<A, C> zip(Applicative<Function<? super B, ? extends C>, Choice2<A, ?>> appFn) {
87+
public <C> Choice2<A, C> zip(Apply<Function<? super B, ? extends C>, Choice2<A, ?>> appFn) {
8688
return appFn.<Choice2<A, Function<? super B, ? extends C>>>coerce()
8789
.match(Choice2::a, this::biMapR);
8890
}
@@ -98,7 +100,7 @@ public <C> Choice2<A, B> discardR(Applicative<C, Choice2<A, ?>> appB) {
98100
}
99101

100102
@Override
101-
public final <C> Choice2<A, C> flatMap(Function<? super B, ? extends Monad<C, Choice2<A, ?>>> f) {
103+
public final <C> Choice2<A, C> flatMap(Function<? super B, ? extends Bind<C, Choice2<A, ?>>> f) {
102104
return match(Choice2::a, b -> f.apply(b).coerce());
103105
}
104106

src/main/java/com/jnape/palatable/lambda/adt/choice/Choice3.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.jnape.palatable.lambda.adt.hlist.HList;
77
import com.jnape.palatable.lambda.adt.hlist.Tuple3;
88
import com.jnape.palatable.lambda.functor.Applicative;
9+
import com.jnape.palatable.lambda.functor.Apply;
910
import com.jnape.palatable.lambda.functor.Bifunctor;
11+
import com.jnape.palatable.lambda.functor.Bind;
1012
import com.jnape.palatable.lambda.monad.Monad;
1113
import com.jnape.palatable.lambda.traversable.Traversable;
1214

@@ -82,7 +84,7 @@ public <D> Choice3<A, B, D> pure(D d) {
8284
}
8385

8486
@Override
85-
public <D> Choice3<A, B, D> zip(Applicative<Function<? super C, ? extends D>, Choice3<A, B, ?>> appFn) {
87+
public <D> Choice3<A, B, D> zip(Apply<Function<? super C, ? extends D>, Choice3<A, B, ?>> appFn) {
8688
return appFn.<Choice3<A, B, Function<? super C, ? extends D>>>coerce()
8789
.match(Choice3::a, Choice3::b, this::biMapR);
8890
}
@@ -98,7 +100,7 @@ public <D> Choice3<A, B, C> discardR(Applicative<D, Choice3<A, B, ?>> appB) {
98100
}
99101

100102
@Override
101-
public <D> Choice3<A, B, D> flatMap(Function<? super C, ? extends Monad<D, Choice3<A, B, ?>>> f) {
103+
public <D> Choice3<A, B, D> flatMap(Function<? super C, ? extends Bind<D, Choice3<A, B, ?>>> f) {
102104
return match(Choice3::a, Choice3::b, c -> f.apply(c).coerce());
103105
}
104106

src/main/java/com/jnape/palatable/lambda/adt/choice/Choice4.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.jnape.palatable.lambda.adt.hlist.HList;
77
import com.jnape.palatable.lambda.adt.hlist.Tuple4;
88
import com.jnape.palatable.lambda.functor.Applicative;
9+
import com.jnape.palatable.lambda.functor.Apply;
910
import com.jnape.palatable.lambda.functor.Bifunctor;
11+
import com.jnape.palatable.lambda.functor.Bind;
1012
import com.jnape.palatable.lambda.monad.Monad;
1113
import com.jnape.palatable.lambda.traversable.Traversable;
1214

@@ -86,7 +88,7 @@ public <E> Choice4<A, B, C, E> pure(E e) {
8688
}
8789

8890
@Override
89-
public <E> Choice4<A, B, C, E> zip(Applicative<Function<? super D, ? extends E>, Choice4<A, B, C, ?>> appFn) {
91+
public <E> Choice4<A, B, C, E> zip(Apply<Function<? super D, ? extends E>, Choice4<A, B, C, ?>> appFn) {
9092
return appFn.<Choice4<A, B, C, Function<? super D, ? extends E>>>coerce()
9193
.match(Choice4::a, Choice4::b, Choice4::c, this::biMapR);
9294
}
@@ -102,7 +104,7 @@ public <E> Choice4<A, B, C, D> discardR(Applicative<E, Choice4<A, B, C, ?>> appB
102104
}
103105

104106
@Override
105-
public <E> Choice4<A, B, C, E> flatMap(Function<? super D, ? extends Monad<E, Choice4<A, B, C, ?>>> f) {
107+
public <E> Choice4<A, B, C, E> flatMap(Function<? super D, ? extends Bind<E, Choice4<A, B, C, ?>>> f) {
106108
return match(Choice4::a, Choice4::b, Choice4::c, d -> f.apply(d).coerce());
107109
}
108110

src/main/java/com/jnape/palatable/lambda/adt/choice/Choice5.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.jnape.palatable.lambda.adt.hlist.HList;
77
import com.jnape.palatable.lambda.adt.hlist.Tuple5;
88
import com.jnape.palatable.lambda.functor.Applicative;
9+
import com.jnape.palatable.lambda.functor.Apply;
910
import com.jnape.palatable.lambda.functor.Bifunctor;
11+
import com.jnape.palatable.lambda.functor.Bind;
1012
import com.jnape.palatable.lambda.monad.Monad;
1113
import com.jnape.palatable.lambda.traversable.Traversable;
1214

@@ -88,7 +90,7 @@ public <F> Choice5<A, B, C, D, F> pure(F f) {
8890
}
8991

9092
@Override
91-
public <F> Choice5<A, B, C, D, F> zip(Applicative<Function<? super E, ? extends F>, Choice5<A, B, C, D, ?>> appFn) {
93+
public <F> Choice5<A, B, C, D, F> zip(Apply<Function<? super E, ? extends F>, Choice5<A, B, C, D, ?>> appFn) {
9294
return appFn.<Choice5<A, B, C, D, Function<? super E, ? extends F>>>coerce()
9395
.match(Choice5::a, Choice5::b, Choice5::c, Choice5::d, this::biMapR);
9496
}
@@ -104,7 +106,7 @@ public <F> Choice5<A, B, C, D, E> discardR(Applicative<F, Choice5<A, B, C, D, ?>
104106
}
105107

106108
@Override
107-
public <F> Choice5<A, B, C, D, F> flatMap(Function<? super E, ? extends Monad<F, Choice5<A, B, C, D, ?>>> f) {
109+
public <F> Choice5<A, B, C, D, F> flatMap(Function<? super E, ? extends Bind<F, Choice5<A, B, C, D, ?>>> f) {
108110
return match(Choice5::a, Choice5::b, Choice5::c, Choice5::d, e -> f.apply(e).coerce());
109111
}
110112

src/main/java/com/jnape/palatable/lambda/adt/choice/Choice6.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.jnape.palatable.lambda.adt.hlist.HList;
77
import com.jnape.palatable.lambda.adt.hlist.Tuple6;
88
import com.jnape.palatable.lambda.functor.Applicative;
9+
import com.jnape.palatable.lambda.functor.Apply;
910
import com.jnape.palatable.lambda.functor.Bifunctor;
11+
import com.jnape.palatable.lambda.functor.Bind;
1012
import com.jnape.palatable.lambda.monad.Monad;
1113
import com.jnape.palatable.lambda.traversable.Traversable;
1214

@@ -91,7 +93,7 @@ public <G> Choice6<A, B, C, D, E, G> pure(G g) {
9193

9294
@Override
9395
public <G> Choice6<A, B, C, D, E, G> zip(
94-
Applicative<Function<? super F, ? extends G>, Choice6<A, B, C, D, E, ?>> appFn) {
96+
Apply<Function<? super F, ? extends G>, Choice6<A, B, C, D, E, ?>> appFn) {
9597
return appFn.<Choice6<A, B, C, D, E, Function<? super F, ? extends G>>>coerce()
9698
.match(Choice6::a, Choice6::b, Choice6::c, Choice6::d, Choice6::e, this::biMapR);
9799
}
@@ -108,7 +110,7 @@ public <G> Choice6<A, B, C, D, E, F> discardR(Applicative<G, Choice6<A, B, C, D,
108110

109111
@Override
110112
public <G> Choice6<A, B, C, D, E, G> flatMap(
111-
Function<? super F, ? extends Monad<G, Choice6<A, B, C, D, E, ?>>> fn) {
113+
Function<? super F, ? extends Bind<G, Choice6<A, B, C, D, E, ?>>> fn) {
112114
return match(Choice6::a, Choice6::b, Choice6::c, Choice6::d, Choice6::e, f -> fn.apply(f).coerce());
113115
}
114116

src/main/java/com/jnape/palatable/lambda/adt/choice/Choice7.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.jnape.palatable.lambda.adt.hlist.HList;
77
import com.jnape.palatable.lambda.adt.hlist.Tuple7;
88
import com.jnape.palatable.lambda.functor.Applicative;
9+
import com.jnape.palatable.lambda.functor.Apply;
910
import com.jnape.palatable.lambda.functor.Bifunctor;
11+
import com.jnape.palatable.lambda.functor.Bind;
1012
import com.jnape.palatable.lambda.monad.Monad;
1113
import com.jnape.palatable.lambda.traversable.Traversable;
1214

@@ -94,7 +96,7 @@ public <H> Choice7<A, B, C, D, E, F, H> pure(H h) {
9496

9597
@Override
9698
public <H> Choice7<A, B, C, D, E, F, H> zip(
97-
Applicative<Function<? super G, ? extends H>, Choice7<A, B, C, D, E, F, ?>> appFn) {
99+
Apply<Function<? super G, ? extends H>, Choice7<A, B, C, D, E, F, ?>> appFn) {
98100
return appFn.<Choice7<A, B, C, D, E, F, Function<? super G, ? extends H>>>coerce()
99101
.match(Choice7::a, Choice7::b, Choice7::c, Choice7::d, Choice7::e, Choice7::f, this::biMapR);
100102
}
@@ -111,7 +113,7 @@ public <H> Choice7<A, B, C, D, E, F, G> discardR(Applicative<H, Choice7<A, B, C,
111113

112114
@Override
113115
public <H> Choice7<A, B, C, D, E, F, H> flatMap(
114-
Function<? super G, ? extends Monad<H, Choice7<A, B, C, D, E, F, ?>>> fn) {
116+
Function<? super G, ? extends Bind<H, Choice7<A, B, C, D, E, F, ?>>> fn) {
115117
return match(Choice7::a, Choice7::b, Choice7::c, Choice7::d, Choice7::e, Choice7::f, g -> fn.apply(g).coerce());
116118
}
117119

src/main/java/com/jnape/palatable/lambda/adt/choice/Choice8.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,9 @@
66
import com.jnape.palatable.lambda.adt.hlist.HList;
77
import com.jnape.palatable.lambda.adt.hlist.Tuple8;
88
import com.jnape.palatable.lambda.functor.Applicative;
9+
import com.jnape.palatable.lambda.functor.Apply;
910
import com.jnape.palatable.lambda.functor.Bifunctor;
11+
import com.jnape.palatable.lambda.functor.Bind;
1012
import com.jnape.palatable.lambda.monad.Monad;
1113
import com.jnape.palatable.lambda.traversable.Traversable;
1214

@@ -90,7 +92,7 @@ public <I> Choice8<A, B, C, D, E, F, G, I> pure(I i) {
9092

9193
@Override
9294
public <I> Choice8<A, B, C, D, E, F, G, I> zip(
93-
Applicative<Function<? super H, ? extends I>, Choice8<A, B, C, D, E, F, G, ?>> appFn) {
95+
Apply<Function<? super H, ? extends I>, Choice8<A, B, C, D, E, F, G, ?>> appFn) {
9496
return appFn.<Choice8<A, B, C, D, E, F, G, Function<? super H, ? extends I>>>coerce()
9597
.match(Choice8::a, Choice8::b, Choice8::c, Choice8::d, Choice8::e, Choice8::f, Choice8::g, this::biMapR);
9698
}
@@ -107,7 +109,7 @@ public <I> Choice8<A, B, C, D, E, F, G, H> discardR(Applicative<I, Choice8<A, B,
107109

108110
@Override
109111
public <I> Choice8<A, B, C, D, E, F, G, I> flatMap(
110-
Function<? super H, ? extends Monad<I, Choice8<A, B, C, D, E, F, G, ?>>> fn) {
112+
Function<? super H, ? extends Bind<I, Choice8<A, B, C, D, E, F, G, ?>>> fn) {
111113
return match(Choice8::a, Choice8::b, Choice8::c, Choice8::d, Choice8::e, Choice8::f, Choice8::g, h -> fn.apply(h).coerce());
112114
}
113115

src/main/java/com/jnape/palatable/lambda/adt/hlist/SingletonHList.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
import com.jnape.palatable.lambda.adt.hlist.HList.HCons;
44
import com.jnape.palatable.lambda.adt.hlist.HList.HNil;
55
import com.jnape.palatable.lambda.functor.Applicative;
6+
import com.jnape.palatable.lambda.functor.Apply;
7+
import com.jnape.palatable.lambda.functor.Bind;
68
import com.jnape.palatable.lambda.monad.Monad;
79
import com.jnape.palatable.lambda.traversable.Traversable;
810

@@ -41,7 +43,7 @@ public <_1Prime> SingletonHList<_1Prime> pure(_1Prime _1Prime) {
4143

4244
@Override
4345
public <_1Prime> SingletonHList<_1Prime> zip(
44-
Applicative<Function<? super _1, ? extends _1Prime>, SingletonHList> appFn) {
46+
Apply<Function<? super _1, ? extends _1Prime>, SingletonHList> appFn) {
4547
return Monad.super.zip(appFn).coerce();
4648
}
4749

@@ -56,7 +58,7 @@ public <_1Prime> SingletonHList<_1> discardR(Applicative<_1Prime, SingletonHList
5658
}
5759

5860
@Override
59-
public <_1Prime> SingletonHList<_1Prime> flatMap(Function<? super _1, ? extends Monad<_1Prime, SingletonHList>> f) {
61+
public <_1Prime> SingletonHList<_1Prime> flatMap(Function<? super _1, ? extends Bind<_1Prime, SingletonHList>> f) {
6062
return f.apply(head()).coerce();
6163
}
6264

src/main/java/com/jnape/palatable/lambda/adt/hlist/Tuple2.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import com.jnape.palatable.lambda.adt.hlist.HList.HCons;
44
import com.jnape.palatable.lambda.adt.product.Product2;
55
import com.jnape.palatable.lambda.functor.Applicative;
6+
import com.jnape.palatable.lambda.functor.Apply;
67
import com.jnape.palatable.lambda.functor.Bifunctor;
8+
import com.jnape.palatable.lambda.functor.Bind;
79
import com.jnape.palatable.lambda.monad.Monad;
810
import com.jnape.palatable.lambda.traversable.Traversable;
911

@@ -100,7 +102,7 @@ public <_2Prime> Tuple2<_1, _2Prime> pure(_2Prime _2Prime) {
100102

101103
@Override
102104
public <_2Prime> Tuple2<_1, _2Prime> zip(
103-
Applicative<Function<? super _2, ? extends _2Prime>, Tuple2<_1, ?>> appFn) {
105+
Apply<Function<? super _2, ? extends _2Prime>, Tuple2<_1, ?>> appFn) {
104106
return Monad.super.zip(appFn).coerce();
105107
}
106108

@@ -115,7 +117,7 @@ public <_2Prime> Tuple2<_1, _2> discardR(Applicative<_2Prime, Tuple2<_1, ?>> app
115117
}
116118

117119
@Override
118-
public <_2Prime> Tuple2<_1, _2Prime> flatMap(Function<? super _2, ? extends Monad<_2Prime, Tuple2<_1, ?>>> f) {
120+
public <_2Prime> Tuple2<_1, _2Prime> flatMap(Function<? super _2, ? extends Bind<_2Prime, Tuple2<_1, ?>>> f) {
119121
return pure(f.apply(_2).<Tuple2<_1, _2Prime>>coerce()._2());
120122
}
121123

0 commit comments

Comments
 (0)