java.lang.Object
com.jnape.palatable.lambda.functions.builtin.fn3.FoldLeft<A,B>
Type Parameters:
A - The Iterable element type
B - The accumulation type
All Implemented Interfaces:
Fn1<Fn2<? super B,? super A,? extends B>,Fn1<B,Fn1<Iterable<A>,B>>>, Fn2<Fn2<? super B,? super A,? extends B>,B,Fn1<Iterable<A>,B>>, Fn3<Fn2<? super B,? super A,? extends B>,B,Iterable<A>,B>, Applicative<Fn1<B,Fn1<Iterable<A>,B>>,Fn1<Fn2<? super B,? super A,? extends B>,?>>, Cartesian<Fn2<? super B,? super A,? extends B>,Fn1<B,Fn1<Iterable<A>,B>>,Fn1<?,?>>, Cocartesian<Fn2<? super B,? super A,? extends B>,Fn1<B,Fn1<Iterable<A>,B>>,Fn1<?,?>>, Contravariant<Fn2<? super B,? super A,? extends B>,Profunctor<?,Fn1<B,Fn1<Iterable<A>,B>>,Fn1<?,?>>>, Functor<Fn1<B,Fn1<Iterable<A>,B>>,Fn1<Fn2<? super B,? super A,? extends B>,?>>, Profunctor<Fn2<? super B,? super A,? extends B>,Fn1<B,Fn1<Iterable<A>,B>>,Fn1<?,?>>, Monad<Fn1<B,Fn1<Iterable<A>,B>>,Fn1<Fn2<? super B,? super A,? extends B>,?>>, MonadReader<Fn2<? super B,? super A,? extends B>,Fn1<B,Fn1<Iterable<A>,B>>,Fn1<Fn2<? super B,? super A,? extends B>,?>>, MonadRec<Fn1<B,Fn1<Iterable<A>,B>>,Fn1<Fn2<? super B,? super A,? extends B>,?>>, MonadWriter<Fn2<? super B,? super A,? extends B>,Fn1<B,Fn1<Iterable<A>,B>>,Fn1<Fn2<? super B,? super A,? extends B>,?>>

public final class FoldLeft<A,B> extends Object implements Fn3<Fn2<? super B,? super A,? extends B>,B,Iterable<A>,B>
Given an Iterable of As, a starting value B, and a Fn2<B, A, B>, iteratively accumulate over the Iterable, ultimately returning a final B value. If the Iterable is empty, just return the starting B value. Note that, as the name implies, this function accumulates from left to right, such that foldLeft(f, 0, asList(1, 2, 3, 4, 5)) is evaluated as f(f(f(f(f(0, 1), 2), 3), 4), 5).

For more information, read about Catamorphisms.

See Also:
  • Field Details

    • INSTANCE

      private static final FoldLeft<?,?> INSTANCE
  • Constructor Details

    • FoldLeft

      private FoldLeft()
  • Method Details

    • checkedApply

      public B checkedApply(Fn2<? super B,? super A,? extends B> fn, B acc, Iterable<A> as)
      Specified by:
      checkedApply in interface Fn3<Fn2<? super B,? super A,? extends B>,B,Iterable<A>,B>
    • foldLeft

      public static <A, B> FoldLeft<A,B> foldLeft()
    • foldLeft

      public static <A, B> Fn2<B,Iterable<A>,B> foldLeft(Fn2<? super B,? super A,? extends B> fn)
    • foldLeft

      public static <A, B> Fn1<Iterable<A>,B> foldLeft(Fn2<? super B,? super A,? extends B> fn, B acc)
    • foldLeft

      public static <A, B> B foldLeft(Fn2<? super B,? super A,? extends B> fn, B acc, Iterable<A> as)