66import com .jnape .palatable .lambda .functions .specialized .checked .CheckedSupplier ;
77import com .jnape .palatable .lambda .functor .Applicative ;
88import com .jnape .palatable .lambda .functor .BoundedBifunctor ;
9+ import com .jnape .palatable .lambda .functor .builtin .Lazy ;
910import com .jnape .palatable .lambda .monad .Monad ;
1011import com .jnape .palatable .lambda .traversable .Traversable ;
1112
1819import static com .jnape .palatable .lambda .functions .builtin .fn1 .Id .id ;
1920import static com .jnape .palatable .lambda .functions .builtin .fn1 .Upcast .upcast ;
2021import static com .jnape .palatable .lambda .functions .builtin .fn2 .Peek2 .peek2 ;
22+ import static com .jnape .palatable .lambda .functor .builtin .Lazy .lazy ;
2123
2224/**
2325 * A {@link Monad} of the evaluation outcome of an expression that might throw. Try/catch/finally semantics map to
@@ -139,36 +141,63 @@ public final <L> Either<L, A> toEither(Function<? super T, ? extends L> fn) {
139141 return match (fn .andThen (Either ::left ), Either ::right );
140142 }
141143
144+ /**
145+ * {@inheritDoc}
146+ */
142147 @ Override
143148 public <B > Try <T , B > fmap (Function <? super A , ? extends B > fn ) {
144149 return Monad .super .<B >fmap (fn ).coerce ();
145150 }
146151
152+ /**
153+ * {@inheritDoc}
154+ */
147155 @ Override
148156 public <B > Try <T , B > flatMap (Function <? super A , ? extends Monad <B , Try <T , ?>>> f ) {
149157 return match (Try ::failure , a -> f .apply (a ).coerce ());
150158 }
151159
160+ /**
161+ * {@inheritDoc}
162+ */
152163 @ Override
153164 public <B > Try <T , B > pure (B b ) {
154165 return success (b );
155166 }
156167
168+ /**
169+ * {@inheritDoc}
170+ */
157171 @ Override
158172 public <B > Try <T , B > zip (Applicative <Function <? super A , ? extends B >, Try <T , ?>> appFn ) {
159173 return Monad .super .zip (appFn ).coerce ();
160174 }
161175
176+ @ Override
177+ public <B > Lazy <Try <T , B >> lazyZip (Lazy <Applicative <Function <? super A , ? extends B >, Try <T , ?>>> lazyAppFn ) {
178+ return match (f -> lazy (failure (f )),
179+ s -> lazyAppFn .fmap (tryF -> tryF .<B >fmap (f -> f .apply (s )).coerce ()));
180+ }
181+
182+ /**
183+ * {@inheritDoc}
184+ */
162185 @ Override
163186 public <B > Try <T , B > discardL (Applicative <B , Try <T , ?>> appB ) {
164187 return Monad .super .discardL (appB ).coerce ();
165188 }
166189
190+ /**
191+ * {@inheritDoc}
192+ */
167193 @ Override
168194 public <B > Try <T , A > discardR (Applicative <B , Try <T , ?>> appB ) {
169195 return Monad .super .discardR (appB ).coerce ();
170196 }
171197
198+ /**
199+ * {@inheritDoc}
200+ */
172201 @ Override
173202 @ SuppressWarnings ("unchecked" )
174203 public <B , App extends Applicative , TravB extends Traversable <B , Try <T , ?>>, AppB extends Applicative <B , App >, AppTrav extends Applicative <TravB , App >> AppTrav traverse (
@@ -177,17 +206,26 @@ public <B> Try<T, A> discardR(Applicative<B, Try<T, ?>> appB) {
177206 a -> fn .apply (a ).fmap (Try ::success ).<TravB >fmap (Applicative ::coerce ).coerce ());
178207 }
179208
209+ /**
210+ * {@inheritDoc}
211+ */
180212 @ Override
181213 public <U extends Throwable , D > Try <U , D > biMap (Function <? super T , ? extends U > lFn ,
182214 Function <? super A , ? extends D > rFn ) {
183215 return match (t -> failure (lFn .apply (t )), a -> success (rFn .apply (a )));
184216 }
185217
218+ /**
219+ * {@inheritDoc}
220+ */
186221 @ Override
187222 public <U extends Throwable > Try <U , A > biMapL (Function <? super T , ? extends U > fn ) {
188223 return (Try <U , A >) BoundedBifunctor .super .<U >biMapL (fn );
189224 }
190225
226+ /**
227+ * {@inheritDoc}
228+ */
191229 @ Override
192230 public <B > Try <T , B > biMapR (Function <? super A , ? extends B > fn ) {
193231 return (Try <T , B >) BoundedBifunctor .super .<B >biMapR (fn );
0 commit comments