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}<B, T></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}<S, {@link Either}<T, A>></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 /**
0 commit comments