## Uses of Interface
com.jnape.palatable.lambda.optics.Optic

- Packages that use Optic
  Package | Description
  --- | ---
  com.jnape.palatable.lambda.adt.hmap |
  com.jnape.palatable.lambda.optics |
  com.jnape.palatable.lambda.optics.functions |

- - ### Uses of Optic in com.jnape.palatable.lambda.adt.hmap

    Subinterfaces of Optic in com.jnape.palatable.lambda.adt.hmap
    Modifier and Type | Interface and Description
    --- | ---
    `interface` | `Schema<Values extends HList>` A lens that focuses on the `heterogeneous list` of values pointed at by one or more `typesafe keys` that must all exist in the same `HMap` to be collectively extracted.
    `interface` | `TypeSafeKey<A,B>` An interface representing a parametrized key for use in `HMap`s.
    `static interface` | `TypeSafeKey.Simple<A>` A simplified `TypeSafeKey` that can only view a value of type `A` as an `A`.

  - ### Uses of Optic in com.jnape.palatable.lambda.optics

    Subinterfaces of Optic in com.jnape.palatable.lambda.optics
    Modifier and Type | Interface and Description
    --- | ---
    `interface` | `Iso<S,T,A,B>` An `Iso` (short for "isomorphism") is an invertible `Lens`: an `Optic` encoding of a bi-directional focusing of two types, and like ``Lens`es`, can be ``View`ed`, `Set`, and ``updated``.
    `static interface` | `Iso.Simple<S,A>` A convenience type with a simplified type signature for common isos with both unified "larger" values and unified "smaller" values.
    `interface` | `Lens<S,T,A,B>` An approximation of van Laarhoven lenses.
    `static interface` | `Lens.Simple<S,A>` A convenience type with a simplified type signature for common lenses with both unified "larger" values and unified "smaller" values.
    `static interface` | `Optic.Simple<P extends Profunctor<?,?,? extends P>,F extends Functor<?,? extends F>,S,A>` An convenience type with a simplified signature for `optics` with unified `S/T` and `A/B` types.
    `interface` | `Prism<S,T,A,B>` Prisms are `Isos` that can fail in one direction.
    `static interface` | `Prism.Simple<S,A>` A convenience type with a simplified type signature for common `prism` with unified `S/T` and `A/B` types.
    `interface` | `ProtoOptic<P extends Profunctor<?,?,? extends P>,S,T,A,B>` A generic supertype representation for a profunctor `Optic` that requires a `Pure` implementation to derive its `Functor` constraint and graduate to a full-fledge `Optic`, equipped with a default `Optic` instance for the profunctor constraint and `Identity`.

    Methods in com.jnape.palatable.lambda.optics that return Optic
    Modifier and Type | Method and Description
    --- | ---
    `default <Z,C> Optic<P,F,S,T,Z,C>` | Optic.`andThen(Optic<? super P,? super F,A,B,Z,C> f)` Left-to-right composition of optics.
    `default <R,U> Optic<P,F,R,U,A,B>` | Optic.`compose(Optic<? super P,? super F,R,U,S,T> g)` Right-to-Left composition of optics.
    `default <C> Optic<P,F,S,T,C,B>` | Optic.`mapA(Fn1<? super A,? extends C> fn)` Covariantly map `A` to `C`, yielding a new optic.
    `default <Z> Optic<P,F,S,T,A,Z>` | Optic.`mapB(Fn1<? super Z,? extends B> fn)` Contravariantly map `B` to `Z`, yielding a new optic.
    `default <R> Optic<P,F,R,T,A,B>` | Optic.`mapS(Fn1<? super R,? extends S> fn)` Contravariantly map `S` to `R`, yielding a new optic.
    `default <U> Optic<P,F,S,U,A,B>` | Optic.`mapT(Fn1<? super T,? extends U> fn)` Covariantly map `T` to `U`, yielding a new optic.
    `static <P extends Profunctor<?,?,? extends P>,F extends Functor<?,? extends F>,S,T,A,B,FB extends Functor<B,? extends F>,FT extends Functor<T,? extends F>,PAFB extends Profunctor<A,FB,? extends P>,PSFT extends Profunctor<S,FT,? extends P>> Optic<P,F,S,T,A,B>` | Optic.`optic(Fn1<PAFB,PSFT> fn)` Promote a monomorphic function to a compatible `Optic`.
    `static <P extends Profunctor<?,?,? extends P>,F extends Functor<?,? extends F>,S,T,A,B> Optic<P,F,S,T,A,B>` | Optic.`reframe(Optic<? super P,? super F,S,T,A,B> optic)` Reframe an `Optic` according to covariant bounds.
    `<F extends Applicative<?,F>> Optic<P,F,S,T,A,B>` | ProtoOptic.`toOptic(Pure<F> pure)` Given a `Pure` lifting function, fix this `ProtoOptic` to the given `Functor` and promote it to an `Optic`.

    Methods in com.jnape.palatable.lambda.optics with parameters of type Optic
    Modifier and Type | Method and Description
    --- | ---
    `static <S,A> Lens.Simple<S,A>` | Lens.Simple.`adapt(Optic<? super Cartesian<?,?,?>,? super Functor<?,?>,S,S,A,A> lens)` Adapt a `Lens` with the right variance to a `Lens.Simple`.
    `static <S,A> Prism.Simple<S,A>` | Prism.Simple.`adapt(Optic<? super Cocartesian<?,?,?>,? super Functor<?,?>,S,S,A,A> optic)` Adapt an `Optic` with compatible bounds to a `simple Prism`.
    `static <P extends Profunctor<?,?,? extends P>,F extends Functor<?,? extends F>,S,A> Optic.Simple<P,F,S,A>` | Optic.Simple.`adapt(Optic<? super P,? super F,S,S,A,A> optic)` Adapt an `Optic` with S/T and A/B unified into a `simple optic`.
    `static <S,A> Iso.Simple<S,A>` | Iso.Simple.`adapt(Optic<? super Profunctor<?,?,?>,? super Functor<?,?>,S,S,A,A> optic)` Adapt an `Optic` with the right variance to an `Iso.Simple`.
    `default <C,D> Lens<S,T,C,D>` | Lens.`andThen(Optic<? super Cartesian<?,?,?>,? super Functor<?,?>,A,B,C,D> f)` Left-to-right composition of optics.
    `default <Z,C> Optic<P,F,S,T,Z,C>` | Optic.`andThen(Optic<? super P,? super F,A,B,Z,C> f)` Left-to-right composition of optics.
    `default <Z,C> Iso<S,T,Z,C>` | Iso.`andThen(Optic<? super Profunctor<?,?,?>,? super Functor<?,?>,A,B,Z,C> f)` Left-to-right composition of optics.
    `default <R,U> Lens<R,U,A,B>` | Lens.`compose(Optic<? super Cartesian<?,?,?>,? super Functor<?,?>,R,U,S,T> g)` Right-to-Left composition of optics.
    `default <R,U> Optic<P,F,R,U,A,B>` | Optic.`compose(Optic<? super P,? super F,R,U,S,T> g)` Right-to-Left composition of optics.
    `default <R,U> Iso<R,U,A,B>` | Iso.`compose(Optic<? super Profunctor<?,?,?>,? super Functor<?,?>,R,U,S,T> g)` Right-to-Left composition of optics.
    `static <S,T,A,B> Iso<S,T,A,B>` | Iso.`iso(Optic<? super Profunctor<?,?,?>,? super Functor<?,?>,S,T,A,B> optic)` Promote an optic with compatible bounds to an `Iso`.
    `static <S,T,A,B> Lens<S,T,A,B>` | Lens.`lens(Optic<? super Cartesian<?,?,?>,? super Functor<?,?>,S,T,A,B> optic)` Promote an optic with compatible bounds to a `Lens`.
    `static <S,T,A,B> Prism<S,T,A,B>` | Prism.`prism(Optic<? super Cocartesian<?,?,?>,? super Functor<?,?>,S,T,A,B> optic)` Promote an `Optic` with compatible bounds to an `Prism`.
    `static <P extends Profunctor<?,?,? extends P>,F extends Functor<?,? extends F>,S,T,A,B> Optic<P,F,S,T,A,B>` | Optic.`reframe(Optic<? super P,? super F,S,T,A,B> optic)` Reframe an `Optic` according to covariant bounds.

  - ### Uses of Optic in com.jnape.palatable.lambda.optics.functions

    Methods in com.jnape.palatable.lambda.optics.functions that return Optic
    Modifier and Type | Method and Description
    --- | ---
    `Optic<Profunctor<?,?,?>,Const<T,?>,B,B,T,T>` | Re.`checkedApply(Optic<? super Tagged<?,?>,? super Identity<?>,S,T,A,B> optic)`
    `Optic<P,Const<Maybe<A>,?>,S,T,Maybe<A>,B>` | Pre.`checkedApply(Optic<P,? super Const<Maybe<A>,?>,S,T,A,B> optic)`
    `static <P extends Profunctor<?,?,? extends P>,S,T,A,B> Optic<P,Const<Maybe<A>,?>,S,T,Maybe<A>,B>` | Pre.`pre(Optic<P,? super Const<Maybe<A>,?>,S,T,A,B> optic)`
    `static <P extends Profunctor<?,?,? extends P>,S,T,A,B> Optic<P,Const<Maybe<A>,?>,S,T,Maybe<A>,B>` | Pre.`pre(ProtoOptic<P,S,T,A,B> protoOptic)`
    `static <S,T,A,B> Optic<Profunctor<?,?,?>,Const<T,?>,B,B,T,T>` | Re.`re(Optic<? super Tagged<?,?>,? super Identity<?>,S,T,A,B> optic)`

    Methods in com.jnape.palatable.lambda.optics.functions with parameters of type Optic
    Modifier and Type | Method and Description
    --- | ---
    `A` | Under.`checkedApply(Optic<? super Exchange<A,B,?,?>,? super Identity<?>,S,T,A,B> optic, Fn1<? super T,? extends S> fn, B b)`
    `A` | View.`checkedApply(Optic<? super Fn1<?,?>,? super Const<A,?>,S,T,A,B> optic, S s)`
    `T` | Set.`checkedApply(Optic<? super Fn1<?,?>,? super Identity<?>,S,T,A,B> optic, B b, S s)`
    `T` | Over.`checkedApply(Optic<? super Fn1<?,?>,? super Identity<?>,S,T,A,B> optic, Fn1<? super A,? extends B> fn, S s)`
    `Either<T,A>` | Matching.`checkedApply(Optic<? super Market<A,B,?,?>,? super Identity<?>,S,T,A,B> optic, S s)`
    `Optic<Profunctor<?,?,?>,Const<T,?>,B,B,T,T>` | Re.`checkedApply(Optic<? super Tagged<?,?>,? super Identity<?>,S,T,A,B> optic)`
    `Optic<P,Const<Maybe<A>,?>,S,T,Maybe<A>,B>` | Pre.`checkedApply(Optic<P,? super Const<Maybe<A>,?>,S,T,A,B> optic)`
    `static <S,T,A,B> Fn1<S,Either<T,A>>` | Matching.`matching(Optic<? super Market<A,B,?,?>,? super Identity<?>,S,T,A,B> optic)`
    `static <S,T,A,B> Either<T,A>` | Matching.`matching(Optic<? super Market<A,B,?,?>,? super Identity<?>,S,T,A,B> optic, S s)`
    `static <S,T,A,B> Fn2<Fn1<? super A,? extends B>,S,T>` | Over.`over(Optic<? super Fn1<?,?>,? super Identity<?>,S,T,A,B> optic)`
    `static <S,T,A,B> Fn1<S,T>` | Over.`over(Optic<? super Fn1<?,?>,? super Identity<?>,S,T,A,B> optic, Fn1<? super A,? extends B> fn)`
    `static <S,T,A,B> T` | Over.`over(Optic<? super Fn1<?,?>,? super Identity<?>,S,T,A,B> optic, Fn1<? super A,? extends B> fn, S s)`
    `static <P extends Profunctor<?,?,? extends P>,S,T,A,B> Optic<P,Const<Maybe<A>,?>,S,T,Maybe<A>,B>` | Pre.`pre(Optic<P,? super Const<Maybe<A>,?>,S,T,A,B> optic)`
    `static <S,T,A,B> Optic<Profunctor<?,?,?>,Const<T,?>,B,B,T,T>` | Re.`re(Optic<? super Tagged<?,?>,? super Identity<?>,S,T,A,B> optic)`
    `static <S,T,A,B> Fn2<B,S,T>` | Set.`set(Optic<? super Fn1<?,?>,? super Identity<?>,S,T,A,B> optic)`
    `static <S,T,A,B> Fn1<S,T>` | Set.`set(Optic<? super Fn1<?,?>,? super Identity<?>,S,T,A,B> optic, B b)`
    `static <S,T,A,B> T` | Set.`set(Optic<? super Fn1<?,?>,? super Identity<?>,S,T,A,B> optic, B b, S s)`
    `static <S,T,A,B> Fn2<Fn1<? super T,? extends S>,B,A>` | Under.`under(Optic<? super Exchange<A,B,?,?>,? super Identity<?>,S,T,A,B> optic)`
    `static <S,T,A,B> Fn1<B,A>` | Under.`under(Optic<? super Exchange<A,B,?,?>,? super Identity<?>,S,T,A,B> optic, Fn1<? super T,? extends S> fn)`
    `static <S,T,A,B> A` | Under.`under(Optic<? super Exchange<A,B,?,?>,? super Identity<?>,S,T,A,B> optic, Fn1<? super T,? extends S> fn, B b)`
    `static <S,T,A,B> Fn1<S,A>` | View.`view(Optic<? super Fn1<?,?>,? super Const<A,?>,S,T,A,B> optic)`
    `static <S,T,A,B> A` | View.`view(Optic<? super Fn1<?,?>,? super Const<A,?>,S,T,A,B> optic, S s)`