arrow-optics / arrow.optics / PLens

PLens

interface PLens<S, T, A, B> : PLensOf<S, T, A, B>

A Lens (or Functional Reference) is an optic that can focus into a structure for getting, setting or modifying the focus (target).

A (polymorphic) PLens is useful when setting or modifying a value for a constructed type i.e. PLens<Tuple2<Double, Int>, Tuple2<String, Int>, Double, String>

A PLens can be seen as a pair of functions:

  • get: (S) -> A meaning we can focus into an S and extract an A
  • set: (B) -> (S) -> T meaning we can focus into an S and set a value B for a target A and obtain a modified source T

Parameters

S - the source of a PLens

T - the modified source of a PLens

A - the focus of a PLens

B - the modified focus of a PLens

Functions

| asFold | View a PLens as a Foldopen fun asFold(): Fold<S, A> | | asGetter | View PLens as a Getteropen fun asGetter(): Getter<S, A> | | asOptional | View a PLens as a POptionalopen fun asOptional(): POptional<S, T, A, B> | | asSetter | View a PLens as a PSetteropen fun asSetter(): PSetter<S, T, A, B> | | asTraversal | View a PLens as a PTraversalopen fun asTraversal(): PTraversal<S, T, A, B> | | choice | Join two PLens with the same focus in Aopen infix fun <S1, T1> choice(other: PLens<S1, T1, A, B>): PLens<Either<S, S1>, Either<T, T1>, A, B> | | compose | Compose a PLens with another PLensopen infix fun <C, D> compose(l: PLens<A, B, C, D>): PLens<S, T, C, D>
Compose a PLens with a POptionalopen infix fun <C, D> compose(other: POptional<A, B, C, D>): POptional<S, T, C, D>
Compose an PLens with a PIsoopen infix fun <C, D> compose(other: PIso<A, B, C, D>): PLens<S, T, C, D>
Compose an PLens with a Getteropen infix fun <C> compose(other: Getter<A, C>): Getter<S, C>
Compose an PLens with a PSetteropen infix fun <C, D> compose(other: PSetter<A, B, C, D>): PSetter<S, T, C, D>
Compose an PLens with a PPrismopen infix fun <C, D> compose(other: PPrism<A, B, C, D>): POptional<S, T, C, D>
Compose an PLens with a Foldopen infix fun <C> compose(other: Fold<A, C>): Fold<S, C>
Compose an PLens with a PTraversalopen infix fun <C, D> compose(other: PTraversal<A, B, C, D>): PTraversal<S, T, C, D> | | exist | Verify if the focus of a PLens satisfies the predicateopen fun exist(s: S, p: (A) -> Boolean): Boolean | | find | Find a focus that satisfies the predicateopen fun find(s: S, p: (A) -> Boolean): Option<A> | | first | Create a product of the PLens and a type Copen fun <C> first(): PLens<Tuple2<S, C>, Tuple2<T, C>, Tuple2<A, C>, Tuple2<B, C>> | | get | abstract fun get(s: S): A | | lift | Lift a function f: (A) -> B to the context of S: (S) -> Topen fun lift(f: (A) -> B): (S) -> T` | | [liftF](lift-f.html) | Lift a function [f](lift-f.html#arrow.optics.PLens$liftF(arrow.typeclasses.Functor((arrow.optics.PLens.liftF.F)), kotlin.Function1((arrow.optics.PLens.A, arrow.Kind((arrow.optics.PLens.liftF.F, arrow.optics.PLens.B)))))/f): `(A) -> Kind<F, B> to the context of `S`: `(S) -&gt; Kind&lt;F, T&gt;open fun liftF(FF: Functor, f: (A) -> Kind<F, B>): (S) -> Kind<F, T>` | | [modify](modify.html) | Modify the focus of s [PLens](./index.html) using s function `(A) -> B``open fun modify(s: S, f: (A) -> B): T` | | [modifyF](modify-f.html) | Modify the focus of a [PLens](./index.html) using Functor function`open fun modifyF(FF: Functor, s: S, f: (A) -> Kind<F, B>): Kind<F, T>` | | [plus](plus.html) | Plus operator overload to compose lenses`open operator fun <C, D> plus(other: `[`PLens`](./index.html)`<A, B, C, D>): `[`PLens`](./index.html)`<S, T, C, D>``open operator fun <C, D> plus(other: `[`POptional`](../-p-optional/index.html)`<A, B, C, D>): `[`POptional`](../-p-optional/index.html)`<S, T, C, D>`
`open operator fun <C, D> plus(other: `[`PIso`](../-p-iso/index.html)`<A, B, C, D>): `[`PLens`](./index.html)`<S, T, C, D>`
`open operator fun plus(other: `[`Getter`](../-getter/index.html)`<A, C>): `[`Getter`](../-getter/index.html)`<S, C>`
`open operator fun <C, D> plus(other: `[`PSetter`](../-p-setter/index.html)`<A, B, C, D>): `[`PSetter`](../-p-setter/index.html)`<S, T, C, D>`
`open operator fun <C, D> plus(other: `[`PPrism`](../-p-prism/index.html)`<A, B, C, D>): `[`POptional`](../-p-optional/index.html)`<S, T, C, D>`
`open operator fun plus(other: `[`Fold`](../-fold/index.html)`<A, C>): `[`Fold`](../-fold/index.html)`<S, C>`
`open operator fun <C, D> plus(other: `[`PTraversal`](../-p-traversal/index.html)`<A, B, C, D>): `[`PTraversal`](../-p-traversal/index.html)`<S, T, C, D>` | | [second](second.html) | Create a product of a type [C](second.html#C) and the [PLens](./index.html)`open fun second(): `[`PLens`](./index.html)`<Tuple2<C, S>, Tuple2<C, T>, Tuple2<C, A>, Tuple2<C, B>>` | | [set](set.html) | `abstract fun set(s: S, b: B): T` | | [split](split.html) | Pair two disjoint [PLens](./index.html)`open infix fun <S1, T1, A1, B1> split(other: `[`PLens`](./index.html)`<S1, T1, A1, B1>): `[`PLens`](./index.html)`<Tuple2<S, S1>, Tuple2<T, T1>, Tuple2<A, A1>, Tuple2<B, B1>>` |

Companion Object Functions

codiagonal PLens that takes either S or S and strips the choice of S.fun <S> codiagonal(): Lens<Either<S, S>, S>
id fun <S> id(): PLens<S, S, S, S>
invoke Invoke operator overload to create a PLens of type S with target A. Can also be used to construct Lensoperator fun <S, T, A, B> invoke(get: (S) -> A, set: (S, B) -> T): PLens<S, T, A, B>
nonEmptyListHead Lens to operate on the head of a NonEmptyListfun <A> nonEmptyListHead(): Lens<NonEmptyList<A>, A>
nonEmptyListTail Lens to operate on the tail of a NonEmptyListfun <A> nonEmptyListTail(): Lens<NonEmptyList<A>, List<A>>
pairFirst Lens to focus into the first value of a Pairfun <A, B> pairFirst(): Lens<Pair<A, B>, A>
pairPFirst PLens to focus into the first value of a Pairfun <A, B, R> pairPFirst(): PLens<Pair<A, B>, Pair<R, B>, A, R>
pairPSecond PLens to focus into the second value of a Pairfun <A, B, R> pairPSecond(): PLens<Pair<A, B>, Pair<A, R>, B, R>
pairSecond Lens to focus into the second value of a Pairfun <A, B> pairSecond(): Lens<Pair<A, B>, B>
tripleFirst Lens to focus into the first value of a Triplefun <A, B, C> tripleFirst(): Lens<Triple<A, B, C>, A>
triplePFirst PLens to focus into the first value of a Triplefun <A, B, C, R> triplePFirst(): PLens<Triple<A, B, C>, Triple<R, B, C>, A, R>
triplePSecond PLens to focus into the second value of a Triplefun <A, B, C, R> triplePSecond(): PLens<Triple<A, B, C>, Triple<A, R, C>, B, R>
triplePThird PLens to focus into the third value of a Triplefun <A, B, C, R> triplePThird(): PLens<Triple<A, B, C>, Triple<A, B, R>, C, R>
tripleSecond Lens to focus into the second value of a Triplefun <A, B, C> tripleSecond(): Lens<Triple<A, B, C>, B>
tripleThird Lens to focus into the third value of a Triplefun <A, B, C> tripleThird(): Lens<Triple<A, B, C>, C>

Extension Properties

some DSL to compose a Prism with focus arrow.core.Some with a Lens with a focus of Option<S>val <T, S> Lens<T, Option<S>>.some: Optional<T, S>

Extension Functions

at DSL to compose At with a Lens for a structure S to focus in on A at given index I.fun <T, S, I, A> Lens<T, S>.at(AT: At<S, I, A>, i: I): Lens<T, A>
at fun <K, V, T> PLens<T, T, MapK<K, V>, MapK<K, V>>.~~at~~(i: K): PLens<T, T, Option<V>, Option<V>>
at fun <K, V, T> PLens<T, T, MapK<K, V>, MapK<K, V>>.~~at~~(i: K): PLens<T, T, Option<V>, Option<V>>
at fun <A, T> PLens<T, T, SetK<A>, SetK<A>>.~~at~~(i: A): PLens<T, T, Boolean, Boolean>
at fun <A, T> PLens<T, T, SetK<A>, SetK<A>>.~~at~~(i: A): PLens<T, T, Boolean, Boolean>
every DSL to compose Each with a Lens for a structure S to see all its foci Afun <T, S, A> Lens<T, S>.~~every~~(EA: Each<S, A>): Traversal<T, A>
DSL to compose Traversal with a Lens for a structure S to see all its foci Afun <T, S, A> Lens<T, S>.every(TR: Traversal<S, A>): Traversal<T, A>
get operator fun <A, T> PLens<T, T, List<A>, List<A>>.get(i: Int): POptional<T, T, A, A>
get operator fun <A, T> PLens<T, T, ListK<A>, ListK<A>>.~~get~~(i: Int): POptional<T, T, A, A>
get operator fun <K, V, T> PLens<T, T, MapK<K, V>, MapK<K, V>>.~~get~~(i: K): POptional<T, T, V, V>
get operator fun <A, T> PLens<T, T, NonEmptyList<A>, NonEmptyList<A>>.~~get~~(i: Int): POptional<T, T, A, A>
get operator fun <A, T> PLens<T, T, SequenceK<A>, SequenceK<A>>.~~get~~(i: Int): POptional<T, T, A, A>
get operator fun <A, T> PLens<T, T, SequenceK<A>, SequenceK<A>>.~~get~~(i: Int): POptional<T, T, A, A>
index DSL to compose Index with a Lens for a structure S to focus in on A at given index Ifun <T, S, I, A> Lens<T, S>.index(ID: Index<S, I, A>, i: I): Optional<T, A>
index fun <K, V, T> PLens<T, T, MapK<K, V>, MapK<K, V>>.~~index~~(i: K): POptional<T, T, V, V>
index fun <K, V, T> PLens<T, T, MapK<K, V>, MapK<K, V>>.~~index~~(i: K): POptional<T, T, V, V>

Do you like Arrow?

Arrow Org
<