## Uses of Interface
com.jnape.palatable.lambda.functions.Fn4

- Packages that use Fn4
  Package | Description
  --- | ---
  com.jnape.palatable.lambda.adt.product |
  com.jnape.palatable.lambda.functions |
  com.jnape.palatable.lambda.functions.builtin.fn2 |
  com.jnape.palatable.lambda.functions.builtin.fn4 |
  com.jnape.palatable.lambda.functions.builtin.fn5 |
  com.jnape.palatable.lambda.functions.builtin.fn6 |
  com.jnape.palatable.lambda.functions.builtin.fn7 |
  com.jnape.palatable.lambda.functions.builtin.fn8 |
  com.jnape.palatable.lambda.functions.specialized |
  com.jnape.palatable.lambda.monoid.builtin |

- - ### Uses of Fn4 in com.jnape.palatable.lambda.adt.product

    Methods in com.jnape.palatable.lambda.adt.product with parameters of type Fn4
    Modifier and Type | Method and Description
    --- | ---
    `default <R> R` | Product4.`into(Fn4<? super _1,? super _2,? super _3,? super _4,? extends R> fn)` Destructure and apply this product to a function accepting the same number of arguments as this product's slots.

  - ### Uses of Fn4 in com.jnape.palatable.lambda.functions

    Subinterfaces of Fn4 in com.jnape.palatable.lambda.functions
    Modifier and Type | Interface and Description
    --- | ---
    `interface` | `Fn5<A,B,C,D,E,F>` A function taking five arguments.
    `interface` | `Fn6<A,B,C,D,E,F,G>` A function taking six arguments.
    `interface` | `Fn7<A,B,C,D,E,F,G,H>` A function taking six arguments.
    `interface` | `Fn8<A,B,C,D,E,F,G,H,I>` A function taking six arguments.

    Methods in com.jnape.palatable.lambda.functions that return Fn4
    Modifier and Type | Method and Description
    --- | ---
    `default Fn4<B,C,D,E,F>` | Fn5.`apply(A a)` Partially apply this function by taking its first argument.
    `default Fn4<C,D,E,F,G>` | Fn6.`apply(A a, B b)` Partially apply this function by taking its first two arguments.
    `default Fn4<D,E,F,G,H>` | Fn7.`apply(A a, B b, C c)` Partially apply this function by taking its first three arguments.
    `default Fn4<E,F,G,H,I>` | Fn8.`apply(A a, B b, C c, D d)` Partially apply this function by taking its first four arguments.
    `default <Y,Z> Fn4<Y,Z,B,C,D>` | Fn3.`compose(Fn2<? super Y,? super Z,? extends A> before)`
    `default <Z> Fn4<Z,B,C,D,E>` | Fn4.`contraMap(Fn1<? super Z,? extends A> fn)`
    `default <Z> Fn4<Z,B,C,D,E>` | Fn4.`diMapL(Fn1<? super Z,? extends A> fn)`
    `default <F> Fn4<A,B,C,D,E>` | Fn4.`discardR(Applicative<F,Fn1<A,?>> appB)`
    `default Fn4<B,A,C,D,E>` | Fn4.`flip()` Flip the order of the first two arguments.
    `static <A,B,C,D,E> Fn4<A,B,C,D,E>` | Fn4.`fn4(Fn1<A,Fn3<B,C,D,E>> curriedFn1)` Static factory method for wrapping a curried `Fn1` in an `Fn4`.
    `static <A,B,C,D,E> Fn4<A,B,C,D,E>` | Fn4.`fn4(Fn2<A,B,Fn2<C,D,E>> curriedFn2)` Static factory method for wrapping a curried `Fn2` in an `Fn4`.
    `static <A,B,C,D,E> Fn4<A,B,C,D,E>` | Fn4.`fn4(Fn3<A,B,C,Fn1<D,E>> curriedFn3)` Static factory method for wrapping a curried `Fn3` in an `Fn4`.
    `static <A,B,C,D,E> Fn4<A,B,C,D,E>` | Fn4.`fn4(Fn4<A,B,C,D,E> fn)` Static factory method for coercing a lambda to an `Fn4`.
    `default Fn4<? super Product2<? extends A,? extends B>,C,D,E,F>` | Fn5.`uncurry()` Returns an `Fn4` that takes the first two arguments as a ``Product2`<A, B>` and the remaining arguments.
    `default <Z> Fn4<Z,A,B,C,D>` | Fn3.`widen()` Widen this function's argument list by prepending an ignored argument of any type to the front.

    Methods in com.jnape.palatable.lambda.functions with parameters of type Fn4
    Modifier and Type | Method and Description
    --- | ---
    `static <A,B,C,D,E> Fn4<A,B,C,D,E>` | Fn4.`fn4(Fn4<A,B,C,D,E> fn)` Static factory method for coercing a lambda to an `Fn4`.
    `static <A,B,C,D,E,F> Fn5<A,B,C,D,E,F>` | Fn5.`fn5(Fn4<A,B,C,D,Fn1<E,F>> curriedFn4)` Static factory method for wrapping a curried `Fn4` in an `Fn5`.
    `static <A,B,C,D,E,F,G> Fn6<A,B,C,D,E,F,G>` | Fn6.`fn6(Fn4<A,B,C,D,Fn2<E,F,G>> curriedFn4)` Static factory method for wrapping a curried `Fn4` in an `Fn6`.
    `static <A,B,C,D,E,F,G,H> Fn7<A,B,C,D,E,F,G,H>` | Fn7.`fn7(Fn4<A,B,C,D,Fn3<E,F,G,H>> curriedFn4)` Static factory method for wrapping a curried `Fn4` in an `Fn7`.
    `static <A,B,C,D,E,F,G,H,I> Fn8<A,B,C,D,E,F,G,H,I>` | Fn8.`fn8(Fn4<A,B,C,D,Fn4<E,F,G,H,I>> curriedFn4)` Static factory method for wrapping a curried `Fn4` in an `Fn8`.

    Method parameters in com.jnape.palatable.lambda.functions with type arguments of type Fn4
    Modifier and Type | Method and Description
    --- | ---
    `static <A,B,C,D,E,F> Fn5<A,B,C,D,E,F>` | Fn5.`fn5(Fn1<A,Fn4<B,C,D,E,F>> curriedFn1)` Static factory method for wrapping a curried `Fn1` in an `Fn5`.
    `static <A,B,C,D,E,F,G> Fn6<A,B,C,D,E,F,G>` | Fn6.`fn6(Fn2<A,B,Fn4<C,D,E,F,G>> curriedFn2)` Static factory method for wrapping a curried `Fn2` in an `Fn6`.
    `static <A,B,C,D,E,F,G,H> Fn7<A,B,C,D,E,F,G,H>` | Fn7.`fn7(Fn3<A,B,C,Fn4<D,E,F,G,H>> curriedFn3)` Static factory method for wrapping a curried `Fn3` in an `Fn7`.
    `static <A,B,C,D,E,F,G,H,I> Fn8<A,B,C,D,E,F,G,H,I>` | Fn8.`fn8(Fn4<A,B,C,D,Fn4<E,F,G,H,I>> curriedFn4)` Static factory method for wrapping a curried `Fn4` in an `Fn8`.

  - ### Uses of Fn4 in com.jnape.palatable.lambda.functions.builtin.fn2

    Methods in com.jnape.palatable.lambda.functions.builtin.fn2 with parameters of type Fn4
    Modifier and Type | Method and Description
    --- | ---
    `E` | Into4.`checkedApply(Fn4<? super A,? super B,? super C,? super D,? extends E> fn, Product4<A,B,C,D> product)`
    `static <A,B,C,D,E> Fn1<Product4<A,B,C,D>,E>` | Into4.`into4(Fn4<? super A,? super B,? super C,? super D,? extends E> fn)`
    `static <A,B,C,D,E> E` | Into4.`into4(Fn4<? super A,? super B,? super C,? super D,? extends E> fn, Product4<A,B,C,D> product)`

  - ### Uses of Fn4 in com.jnape.palatable.lambda.functions.builtin.fn4

    Classes in com.jnape.palatable.lambda.functions.builtin.fn4 that implement Fn4
    Modifier and Type | Class and Description
    --- | ---
    `class` | `IfThenElse<A,B>`
    `class` | `LiftA3<A,B,C,D,App extends Applicative<?,App>,AppD extends Applicative<D,App>>` Lift into and apply an `Fn3` to three `Applicative` values, returning the result inside the same `Applicative` context.
    `class` | `RateLimit<A>` Given an `Fn0` of `Instants` (presumably backed by a clock), a `limit`, a `Duration`, and an `Iterable` `as`, return an `Iterable` that iterates `as` according to the threshold specified by the limit per duration, using the `Fn0` to advance time.

  - ### Uses of Fn4 in com.jnape.palatable.lambda.functions.builtin.fn5

    Classes in com.jnape.palatable.lambda.functions.builtin.fn5 that implement Fn4
    Modifier and Type | Class and Description
    --- | ---
    `class` | `LiftA4<A,B,C,D,E,App extends Applicative<?,App>,AppE extends Applicative<E,App>>` Lift into and apply an `Fn4` to four `Applicative` values, returning the result inside the same `Applicative` context.

    Methods in com.jnape.palatable.lambda.functions.builtin.fn5 that return Fn4
    Modifier and Type | Method and Description
    --- | ---
    `static <A,B,C,D,E,App extends Applicative<?,App>,AppE extends Applicative<E,App>> Fn4<Applicative<A,App>,Applicative<B,App>,Applicative<C,App>,Applicative<D,App>,AppE>` | LiftA4.`liftA4(Fn4<A,B,C,D,E> fn)`

    Methods in com.jnape.palatable.lambda.functions.builtin.fn5 with parameters of type Fn4
    Modifier and Type | Method and Description
    --- | ---
    `AppE` | LiftA4.`checkedApply(Fn4<A,B,C,D,E> fn, Applicative<A,App> appA, Applicative<B,App> appB, Applicative<C,App> appC, Applicative<D,App> appD)`
    `static <A,B,C,D,E,App extends Applicative<?,App>,AppE extends Applicative<E,App>> Fn4<Applicative<A,App>,Applicative<B,App>,Applicative<C,App>,Applicative<D,App>,AppE>` | LiftA4.`liftA4(Fn4<A,B,C,D,E> fn)`
    `static <A,B,C,D,E,App extends Applicative<?,App>,AppE extends Applicative<E,App>> Fn3<Applicative<B,App>,Applicative<C,App>,Applicative<D,App>,AppE>` | LiftA4.`liftA4(Fn4<A,B,C,D,E> fn, Applicative<A,App> appA)`
    `static <A,B,C,D,E,App extends Applicative<?,App>,AppE extends Applicative<E,App>> Fn2<Applicative<C,App>,Applicative<D,App>,AppE>` | LiftA4.`liftA4(Fn4<A,B,C,D,E> fn, Applicative<A,App> appA, Applicative<B,App> appB)`
    `static <A,B,C,D,E,App extends Applicative<?,App>,AppE extends Applicative<E,App>> Fn1<Applicative<D,App>,AppE>` | LiftA4.`liftA4(Fn4<A,B,C,D,E> fn, Applicative<A,App> appA, Applicative<B,App> appB, Applicative<C,App> appC)`
    `static <A,B,C,D,E,App extends Applicative<?,App>,AppE extends Applicative<E,App>> AppE` | LiftA4.`liftA4(Fn4<A,B,C,D,E> fn, Applicative<A,App> appA, Applicative<B,App> appB, Applicative<C,App> appC, Applicative<D,App> appD)`

  - ### Uses of Fn4 in com.jnape.palatable.lambda.functions.builtin.fn6

    Classes in com.jnape.palatable.lambda.functions.builtin.fn6 that implement Fn4
    Modifier and Type | Class and Description
    --- | ---
    `class` | `LiftA5<A,B,C,D,E,F,App extends Applicative<?,App>,AppF extends Applicative<F,App>>` Lift into and apply an `Fn5` to five `Applicative` values, returning the result inside the same `Applicative` context.

    Methods in com.jnape.palatable.lambda.functions.builtin.fn6 that return Fn4
    Modifier and Type | Method and Description
    --- | ---
    `static <A,B,C,D,E,F,App extends Applicative<?,App>,AppF extends Applicative<F,App>> Fn4<Applicative<B,App>,Applicative<C,App>,Applicative<D,App>,Applicative<E,App>,AppF>` | LiftA5.`liftA5(Fn5<A,B,C,D,E,F> fn, Applicative<A,App> appA)`

  - ### Uses of Fn4 in com.jnape.palatable.lambda.functions.builtin.fn7

    Classes in com.jnape.palatable.lambda.functions.builtin.fn7 that implement Fn4
    Modifier and Type | Class and Description
    --- | ---
    `class` | `LiftA6<A,B,C,D,E,F,G,App extends Applicative<?,App>,AppG extends Applicative<G,App>>` Lift into and apply an `Fn6` to six `Applicative` values, returning the result inside the same `Applicative` context.

    Methods in com.jnape.palatable.lambda.functions.builtin.fn7 that return Fn4
    Modifier and Type | Method and Description
    --- | ---
    `static <A,B,C,D,E,F,G,App extends Applicative<?,App>,AppG extends Applicative<G,App>> Fn4<Applicative<C,App>,Applicative<D,App>,Applicative<E,App>,Applicative<F,App>,AppG>` | LiftA6.`liftA6(Fn6<A,B,C,D,E,F,G> fn, Applicative<A,App> appA, Applicative<B,App> appB)`

  - ### Uses of Fn4 in com.jnape.palatable.lambda.functions.builtin.fn8

    Classes in com.jnape.palatable.lambda.functions.builtin.fn8 that implement Fn4
    Modifier and Type | Class and Description
    --- | ---
    `class` | `LiftA7<A,B,C,D,E,F,G,H,App extends Applicative<?,App>,AppH extends Applicative<H,App>>` Lift into and apply an `Fn7` to seven `Applicative` values, returning the result inside the same `Applicative` context.

    Methods in com.jnape.palatable.lambda.functions.builtin.fn8 that return Fn4
    Modifier and Type | Method and Description
    --- | ---
    `static <A,B,C,D,E,F,G,H,App extends Applicative<?,App>,AppH extends Applicative<H,App>> Fn4<Applicative<D,App>,Applicative<E,App>,Applicative<F,App>,Applicative<G,App>,AppH>` | LiftA7.`liftA7(Fn7<A,B,C,D,E,F,G,H> fn, Applicative<A,App> appA, Applicative<B,App> appB, Applicative<C,App> appC)`

  - ### Uses of Fn4 in com.jnape.palatable.lambda.functions.specialized

    Subinterfaces of Fn4 in com.jnape.palatable.lambda.functions.specialized
    Modifier and Type | Interface and Description
    --- | ---
    `interface` | `BiMonoidFactory<A,B,C>`
    `interface` | `BiSemigroupFactory<A,B,C>`

  - ### Uses of Fn4 in com.jnape.palatable.lambda.monoid.builtin

    Classes in com.jnape.palatable.lambda.monoid.builtin that implement Fn4
    Modifier and Type | Class and Description
    --- | ---
    `class` | `Collapse<_1,_2>` A `Monoid` instance formed by a ``Tuple2`<_1, _2>` and monoids over `_1` and `_2`.
    `class` | `Merge<L,R>` A `Monoid` instance formed by `Either.merge(com.jnape.palatable.lambda.functions.Fn2<? super L, ? super L, ? extends L>, com.jnape.palatable.lambda.functions.Fn2<? super R, ? super R, ? extends R>, com.jnape.palatable.lambda.adt.Either<L, R>...)`, a semigroup over `L`, and a monoid over `R`.
    `class` | `MergeMaps<K,V>` A `Monoid` instance formed by `Map.merge(Object, Object, BiFunction)` and a semigroup over `V`.