Class FoldRight<A,B>
java.lang.Object
com.jnape.palatable.lambda.functions.builtin.fn3.FoldRight<A,B>
- Type Parameters:
A
- The Iterable element typeB
- The accumulation type
- All Implemented Interfaces:
Fn1<Fn2<? super A,
,? super Lazy<B>, ? extends Lazy<B>>, Fn1<Lazy<B>, Fn1<Iterable<A>, Lazy<B>>>> Fn2<Fn2<? super A,
,? super Lazy<B>, ? extends Lazy<B>>, Lazy<B>, Fn1<Iterable<A>, Lazy<B>>> Fn3<Fn2<? super A,
,? super Lazy<B>, ? extends Lazy<B>>, Lazy<B>, Iterable<A>, Lazy<B>> Applicative<Fn1<Lazy<B>,
,Fn1<Iterable<A>, Lazy<B>>>, Fn1<Fn2<? super A, ? super Lazy<B>, ? extends Lazy<B>>, ?>> Cartesian<Fn2<? super A,
,? super Lazy<B>, ? extends Lazy<B>>, Fn1<Lazy<B>, Fn1<Iterable<A>, Lazy<B>>>, Fn1<?, ?>> Cocartesian<Fn2<? super A,
,? super Lazy<B>, ? extends Lazy<B>>, Fn1<Lazy<B>, Fn1<Iterable<A>, Lazy<B>>>, Fn1<?, ?>> Contravariant<Fn2<? super A,
,? super Lazy<B>, ? extends Lazy<B>>, Profunctor<?, Fn1<Lazy<B>, Fn1<Iterable<A>, Lazy<B>>>, Fn1<?, ?>>> Functor<Fn1<Lazy<B>,
,Fn1<Iterable<A>, Lazy<B>>>, Fn1<Fn2<? super A, ? super Lazy<B>, ? extends Lazy<B>>, ?>> Profunctor<Fn2<? super A,
,? super Lazy<B>, ? extends Lazy<B>>, Fn1<Lazy<B>, Fn1<Iterable<A>, Lazy<B>>>, Fn1<?, ?>> Monad<Fn1<Lazy<B>,
,Fn1<Iterable<A>, Lazy<B>>>, Fn1<Fn2<? super A, ? super Lazy<B>, ? extends Lazy<B>>, ?>> MonadReader<Fn2<? super A,
,? super Lazy<B>, ? extends Lazy<B>>, Fn1<Lazy<B>, Fn1<Iterable<A>, Lazy<B>>>, Fn1<Fn2<? super A, ? super Lazy<B>, ? extends Lazy<B>>, ?>> MonadRec<Fn1<Lazy<B>,
,Fn1<Iterable<A>, Lazy<B>>>, Fn1<Fn2<? super A, ? super Lazy<B>, ? extends Lazy<B>>, ?>> MonadWriter<Fn2<? super A,
? super Lazy<B>, ? extends Lazy<B>>, Fn1<Lazy<B>, Fn1<Iterable<A>, Lazy<B>>>, Fn1<Fn2<? super A, ? super Lazy<B>, ? extends Lazy<B>>, ?>>
public final class FoldRight<A,B>
extends Object
implements Fn3<Fn2<? super A,? super Lazy<B>,? extends Lazy<B>>,Lazy<B>,Iterable<A>,Lazy<B>>
Given an
Iterable
of A
s, a starting lazy
value B
, and a
Fn2
<A, Lazy
<B>, Lazy
<B>>
, iteratively accumulate over the
Iterable
, ultimately returning a final Lazy
<B>
value. If the
Iterable
is empty, just return the starting Lazy
<B>
value. This function is
computationally the iterative inverse of FoldLeft
, but uses Lazy
to allow support stack-safe
execution.
Example:
Lazy<Iterable<Integer>> lazyCopy = foldRight(
(head, lazyTail) -> lazy(cons(head, () -> lazyTail.value().iterator())),
lazy(emptyList()),
iterate(x -> x + 1, 0));
Iterable<Integer> copy = () -> lazyCopy.value().iterator();
take(3, copy).forEach(System.out::println); // prints "1, 2, 3"
take(3, copy).forEach(System.out::println); // prints "1, 2, 3"
For more information, read about Catamorphisms.
- See Also:
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.jnape.palatable.lambda.functions.Fn1
andThen, carry, cartesian, censor, choose, cocartesian, diMap, diMapR, discardL, flatMap, fmap, lazyZip, listens, local, pure, self, thunk, toFunction, trampolineM, zip, zip
Methods inherited from interface com.jnape.palatable.lambda.functions.Fn2
checkedApply, toBiFunction
-
Field Details
-
INSTANCE
-
-
Constructor Details
-
FoldRight
private FoldRight()
-
-
Method Details