Class SafeT<M extends MonadRec<?,M>,A>

java.lang.Object
com.jnape.palatable.lambda.monad.SafeT<M,A>
Type Parameters:
M - the MonadRec instance
A - the carrier type
All Implemented Interfaces:
Applicative<A,SafeT<M,?>>, Functor<A,SafeT<M,?>>, Monad<A,SafeT<M,?>>, MonadBase<M,A,SafeT<?,?>>, MonadRec<A,SafeT<M,?>>, MonadT<M,A,SafeT<M,?>,SafeT<?,?>>

public final class SafeT<M extends MonadRec<?,M>,A> extends Object implements MonadT<M,A,SafeT<M,?>,SafeT<?,?>>
A stack-safe monad transformer that can safely interpret deeply nested left- or right-associated binds for any MonadRec.

Example:

 
 Times.<Fn1<Integer, Integer>>times(100_000, f -> f.fmap(x -> x + 1), id()).apply(0); // stack-overflow
 Times.<SafeT<Fn1<Integer, ?>, Integer>>times(100_000, f -> f.fmap(x -> x + 1), safeT(id()))
         .<Fn1<Integer, Integer>>runSafeT()
         .apply(0); // 100_000
 
 

Inspired by Phil Freeman's paper Stack Safety for Free.