Class Trampoline<A,B>
- java.lang.Object
-
- com.jnape.palatable.lambda.functions.recursion.Trampoline<A,B>
-
- Type Parameters:
A- the trampolined function's input typeB- the trampolined function's output type
- All Implemented Interfaces:
Fn1<Fn1<? super A,? extends RecursiveResult<A,B>>,Fn1<A,B>>,Fn2<Fn1<? super A,? extends RecursiveResult<A,B>>,A,B>,Applicative<Fn1<A,B>,Fn1<Fn1<? super A,? extends RecursiveResult<A,B>>,?>>,Cartesian<Fn1<? super A,? extends RecursiveResult<A,B>>,Fn1<A,B>,Fn1<?,?>>,Cocartesian<Fn1<? super A,? extends RecursiveResult<A,B>>,Fn1<A,B>,Fn1<?,?>>,Contravariant<Fn1<? super A,? extends RecursiveResult<A,B>>,Profunctor<?,Fn1<A,B>,Fn1<?,?>>>,Functor<Fn1<A,B>,Fn1<Fn1<? super A,? extends RecursiveResult<A,B>>,?>>,Profunctor<Fn1<? super A,? extends RecursiveResult<A,B>>,Fn1<A,B>,Fn1<?,?>>,Monad<Fn1<A,B>,Fn1<Fn1<? super A,? extends RecursiveResult<A,B>>,?>>,MonadReader<Fn1<? super A,? extends RecursiveResult<A,B>>,Fn1<A,B>,Fn1<Fn1<? super A,? extends RecursiveResult<A,B>>,?>>,MonadRec<Fn1<A,B>,Fn1<Fn1<? super A,? extends RecursiveResult<A,B>>,?>>,MonadWriter<Fn1<? super A,? extends RecursiveResult<A,B>>,Fn1<A,B>,Fn1<Fn1<? super A,? extends RecursiveResult<A,B>>,?>>
public final class Trampoline<A,B> extends java.lang.Object implements Fn2<Fn1<? super A,? extends RecursiveResult<A,B>>,A,B>
Given an(analogous to "recurse" and "return" tail position instructions, respectively), produce aFn1<A,CoProduct2<A, B, ?>>that unrolls the original function by iteratively passing each result that matches the input (Fn1<A, B>A) back to the original function, and then terminating on and returning the first output (B).This is isomorphic to - though presumably faster than - taking the last element of an
Unfoldrcall.
-
-
Field Summary
Fields Modifier and Type Field Description private static Trampoline<?,?>INSTANCE
-
Constructor Summary
Constructors Constructor Description Trampoline()
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description BcheckedApply(Fn1<? super A,? extends RecursiveResult<A,B>> fn, A a)static <A,B>
Trampoline<A,B>trampoline()static <A,B>
Fn1<A,B>trampoline(Fn1<? super A,? extends RecursiveResult<A,B>> fn)static <A,B>
Btrampoline(Fn1<? super A,? extends RecursiveResult<A,B>> fn, A a)-
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
-
-
-
-
Field Detail
-
INSTANCE
private static final Trampoline<?,?> INSTANCE
-
-
Method Detail
-
checkedApply
public B checkedApply(Fn1<? super A,? extends RecursiveResult<A,B>> fn, A a)
- Specified by:
checkedApplyin interfaceFn2<Fn1<? super A,? extends RecursiveResult<A,B>>,A,B>
-
trampoline
public static <A,B> Trampoline<A,B> trampoline()
-
trampoline
public static <A,B> Fn1<A,B> trampoline(Fn1<? super A,? extends RecursiveResult<A,B>> fn)
-
trampoline
public static <A,B> B trampoline(Fn1<? super A,? extends RecursiveResult<A,B>> fn, A a)
-
-