# Package com.jnape.palatable.lambda.functions.builtin.fn3

- Class Summary
  Class | Description
  --- | ---
  Between<A extends Comparable<A>> | Given two bounds and a value, return whether or not the value is greater than or equal to the lower bound and less than or equal to the upper bound.
  Bracket<A,B> | Given an `IO` that yields some type `A`, a cleanup operation to run if a value of that type could be provisioned, and a kleisli arrow from that type to a new `IO` of type `B`, produce an ``IO`<B>` that, when run, will provision the `A`, `flatMap` it to `B`, and clean up the original value if it was produced in the first place.
  Clamp<A extends Comparable<A>> | Given two bounds and a value, "clamp" the value between the bounds via the following algorithm: - if the value is strictly less than the lower bound, return the lower bound - if the value is strictly greater than the upper bound, return the upper bound - otherwise, return the value
  CmpEqBy<A,B extends Comparable<B>> | Given a mapping function from some type `A` to some `Comparable` type `B` and two values of type `A`, return `true` if the first value is strictly equal to the second value (according to `Comparable.compareTo(Object)` in terms of their mapped `B` results; otherwise, return false.
  FoldLeft<A,B> | Given an `Iterable` of `A`s, a starting value `B`, and a ``Fn2`<B, A, B>`, iteratively accumulate over the `Iterable`, ultimately returning a final `B` value.
  FoldRight<A,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.
  GTBy<A,B extends Comparable<B>> | Given a mapping function from some type `A` to some `Comparable` type `B` and two values of type `A`, return `true` if the second value is strictly greater than the first value in terms of their mapped `B` results; otherwise, return false.
  GTEBy<A,B extends Comparable<B>> | Given a mapping function from some type `A` to some `Comparable` type `B` and two values of type `A`, return `true` if the second value is greater than or equal to the first value in terms of their mapped `B` results according to `Comparable.compareTo(Object)`; otherwise, return false.
  LiftA2<A,B,C,App extends Applicative<?,App>,AppC extends Applicative<C,App>> | Lift into and apply an `Fn2` to two `Applicative` values, returning the result inside the same `Applicative` context.
  LTBy<A,B extends Comparable<B>> | Given a mapping function from some type `A` to some `Comparable` type `B` and two values of type `A`, return `true` if the second value is strictly less than the first value in terms of their mapped `B` results; otherwise, return false.
  LTEBy<A,B extends Comparable<B>> | Given a mapping function from some type `A` to some `Comparable` type `B` and two values of type `A`, return `true` if the second value is less than or equal to the first value in terms of their mapped `B` results according to `Comparable.compareTo(Object)`; otherwise, return false.
  ScanLeft<A,B> | Given an `Iterable` of `A`s, a starting value `B`, and a ``Fn2`<B, A, B>`, iteratively accumulate over the `Iterable`, collecting each function application result, finally returning an `Iterable` of all the results.
  Times<A> | Given some number of times `n` to invoke a function `A -> A`, and given an input `A`, iteratively apply the function to the input, and then to the result of the invocation, a total of `n` times, returning the result.
  ZipWith<A,B,C> | Zip together two `Iterable`s by applying a zipping function to the successive elements of each `Iterable` until one of them runs out of elements.