Fold

interface Fold<S, A>

A Fold is an optic that allows to focus into structure and get multiple results.

Fold is a generalisation of an instance of Foldable and is implemented in terms of foldMap.

Parameters

S

the source of a Fold

A

the target of a Fold

Types

Link copied to clipboard
object Companion

Functions

Link copied to clipboard
open fun all(source: S, predicate: (A) -> Boolean): Boolean

Check if all targets satisfy the predicate

Link copied to clipboard
open fun any(source: S, predicate: (A) -> Boolean): Boolean

Returns true if at least one focus matches the given predicate.

Link copied to clipboard
open infix fun <C> choice(other: Fold<C, A>): Fold<Either<S, C>, A>

Join two Fold with the same target

Link copied to clipboard
open fun combineAll(M: Monoid<A>, source: S): A

Alias for fold.

Link copied to clipboard
open infix fun <C> compose(other: Fold<in A, out C>): Fold<S, C>

Compose a Fold with a Fold

Link copied to clipboard
open fun exists(source: S, predicate: (A) -> Boolean): Boolean

Check whether at least one element satisfies the predicate.

Link copied to clipboard
open fun findOrNull(source: S, predicate: (A) -> Boolean): A?

Find the first element matching the predicate, if one exists.

Link copied to clipboard
open fun firstOrNull(source: S): A?

Get the first target or null

Link copied to clipboard
open fun fold(M: Monoid<A>, source: S): A

Fold using the given Monoid instance.

Link copied to clipboard
abstract fun <R> foldMap(    M: Monoid<R>,     source: S,     map: (A) -> R): R

Map each target to a type R and use a Monoid to fold the results

Link copied to clipboard
open fun getAll(source: S): List<A>

Get all targets of the Fold

Link copied to clipboard
open fun isEmpty(source: S): Boolean

Check if there is no target

Link copied to clipboard
open fun isNotEmpty(source: S): Boolean

Check if there is at least one target

Link copied to clipboard
open fun lastOrNull(source: S): A?

Get the last target or null

Link copied to clipboard
open fun <C> left(): Fold<Either<S, C>, Either<A, C>>

Create a sum of the Fold and a type C

Link copied to clipboard
open operator fun <C> plus(other: Fold<in A, out C>): Fold<S, C>
Link copied to clipboard
open fun <C> right(): Fold<Either<C, S>, Either<C, A>>

Create a sum of a type C and the Fold

Link copied to clipboard
open fun size(source: S): Int

Calculate the number of targets

Inheritors

Link copied to clipboard
Link copied to clipboard
Link copied to clipboard
Link copied to clipboard

Extensions

Link copied to clipboard
fun <T, S, I, A> Fold<T, S>.at(AT: At<S, I, A>, i: I): Fold<T, A>

DSL to compose At with a Fold for a structure S to focus in on A at given index I.

Link copied to clipboard
fun <T, S, A> Fold<T, S>.every(TR: Every<S, A>): Fold<T, A>

DSL to compose Traversal with a Fold for a structure S to see all its foci A

Link copied to clipboard
fun <T, S, I, A> Fold<T, S>.index(ID: Index<S, I, A>, i: I): Fold<T, A>

DSL to compose Index with a Fold for a structure S to focus in on A at given index I

Link copied to clipboard
val <T, S> Fold<T, Option<S>>.some: Fold<T, S>

DSL to compose a Prism with focus arrow.core.Some with a Fold with a focus of Option<S>