optics-core-0.2: Optics as an abstract interface: core definitions

Optics.IxTraversal

Description

An IxTraversal is an indexed version of a Traversal. See the "Indexed optics" section of the overview documentation in the Optics module of the main optics package for more details on indexed optics.

Synopsis

# Formation

type IxTraversal i s t a b = Optic A_Traversal (WithIx i) s t a b Source #

Type synonym for a type-modifying indexed traversal.

type IxTraversal' i s a = Optic' A_Traversal (WithIx i) s a Source #

Type synonym for a type-preserving indexed traversal.

# Introduction

itraversalVL :: IxTraversalVL i s t a b -> IxTraversal i s t a b Source #

Build an indexed traversal from the van Laarhoven representation.

itraversalVL . itraverseOfid
itraverseOf . itraversalVLid

# Elimination

itraverseOf :: (Is k A_Traversal, Applicative f, is HasSingleIndex i) => Optic k is s t a b -> (i -> a -> f b) -> s -> f t Source #

Map each element of a structure targeted by an IxTraversal (supplying the index), evaluate these actions from left to right, and collect the results.

This yields the van Laarhoven representation of an indexed traversal.

# Well-formedness

itraverseOf o (const pure) ≡ pure
fmap (itraverseOf o f) . itraverseOf o g ≡ getCompose . itraverseOf o (\ i -> Compose . fmap (f i) . g i)

See also each, which is an IxTraversal over each element of a (potentially monomorphic) container.

itraversed :: TraversableWithIndex i f => IxTraversal i (f a) (f b) a b Source #

Indexed traversal via the TraversableWithIndex class.

itraverseOf itraverseditraverse
>>> iover (itraversed <%> itraversed) (,) ["ab", "cd"]
[[((0,0),'a'),((0,1),'b')],[((1,0),'c'),((1,1),'d')]]

ignored :: IxTraversal i s s a b Source #

This is the trivial empty IxTraversal.

>>> 6 & ignored %~ absurd
6

elementsOf :: Is k A_Traversal => Optic k is s t a a -> (Int -> Bool) -> IxTraversal Int s t a a Source #

Traverse selected elements of a Traversal where their ordinal positions match a predicate.

elements :: Traversable f => (Int -> Bool) -> IxTraversal' Int (f a) a Source #

Traverse elements of a Traversable container where their ordinal positions match a predicate.

elementselementsOf traverse

elementOf :: Is k A_Traversal => Optic k is s t a a -> Int -> IxTraversal Int s t a a Source #

Traverse the nth element of a Traversal if it exists.

TODO: the result ideally should be an indexed affine traversal.

element :: Traversable f => Int -> IxTraversal' Int (f a) a Source #

Traverse the nth element of a Traversable container.

elementelementOf traversed

iforOf :: (Is k A_Traversal, Applicative f, is HasSingleIndex i) => Optic k is s t a b -> s -> (i -> a -> f b) -> f t Source #

A version of itraverseOf with the arguments flipped.

imapAccumLOf :: (Is k A_Traversal, is HasSingleIndex i) => Optic k is s t a b -> (i -> acc -> a -> (b, acc)) -> acc -> s -> (t, acc) Source #

Generalizes mapAccumL to an arbitrary IxTraversal.

imapAccumLOf accumulates state from left to right.

mapAccumLOf o ≡ imapAccumLOf o . const

imapAccumROf :: (Is k A_Traversal, is HasSingleIndex i) => Optic k is s t a b -> (i -> acc -> a -> (b, acc)) -> acc -> s -> (t, acc) Source #

Generalizes mapAccumR to an arbitrary IxTraversal.

imapAccumROf accumulates state from right to left.

mapAccumROf o ≡ imapAccumROf o . const

iscanl1Of :: (Is k A_Traversal, is HasSingleIndex i) => Optic k is s t a a -> (i -> a -> a -> a) -> s -> t Source #

This permits the use of scanl1 over an arbitrary IxTraversal.

iscanr1Of :: (Is k A_Traversal, is HasSingleIndex i) => Optic k is s t a a -> (i -> a -> a -> a) -> s -> t Source #

This permits the use of scanr1 over an arbitrary IxTraversal.

ifailover :: (Is k A_Traversal, is HasSingleIndex i) => Optic k is s t a b -> (i -> a -> b) -> s -> Maybe t Source #

Try to map a function which uses the index over this IxTraversal, returning Nothing if the IxTraversal has no targets.

ifailover' :: (Is k A_Traversal, is HasSingleIndex i) => Optic k is s t a b -> (i -> a -> b) -> s -> Maybe t Source #

Version of ifailover strict in the application of the function.

# Combinators

indices :: (Is k A_Traversal, is HasSingleIndex i) => (i -> Bool) -> Optic k is s t a a -> IxTraversal i s t a a Source #

Filter results of an IxTraversal that don't satisfy a predicate on the indices.

>>> toListOf (itraversed %& indices even) "foobar"
"foa"

ibackwards :: (Is k A_Traversal, is HasSingleIndex i) => Optic k is s t a b -> IxTraversal i s t a b Source #

This allows you to traverse the elements of an indexed traversal in the opposite order.

ipartsOf :: forall k is i s t a. (Is k A_Traversal, is HasSingleIndex i) => Optic k is s t a a -> IxLens [i] s t [a] [a] Source #

An indexed version of partsOf that receives the entire list of indices as its indices.

# Subtyping

Tag for a traversal.

Instances
 Source # Instance detailsDefined in Optics.Internal.Optic.Subtyping Methodsimplies :: proxy A_Traversal A_Fold p -> (Constraints A_Traversal p -> r) -> Constraints A_Fold p -> r Source # Source # Instance detailsDefined in Optics.Internal.Optic.Subtyping Methodsimplies :: proxy A_Traversal A_Setter p -> (Constraints A_Traversal p -> r) -> Constraints A_Setter p -> r Source # Source # Instance detailsDefined in Optics.Internal.Optic.Subtyping Methodsimplies :: proxy An_AffineTraversal A_Traversal p -> (Constraints An_AffineTraversal p -> r) -> Constraints A_Traversal p -> r Source # Source # Instance detailsDefined in Optics.Internal.Optic.Subtyping Methodsimplies :: proxy A_Prism A_Traversal p -> (Constraints A_Prism p -> r) -> Constraints A_Traversal p -> r Source # Source # Instance detailsDefined in Optics.Internal.Optic.Subtyping Methodsimplies :: proxy A_Lens A_Traversal p -> (Constraints A_Lens p -> r) -> Constraints A_Traversal p -> r Source # Source # Instance detailsDefined in Optics.Internal.Optic.Subtyping Methodsimplies :: proxy An_Iso A_Traversal p -> (Constraints An_Iso p -> r) -> Constraints A_Traversal p -> r Source # ToReadOnly A_Traversal s t a b Source # Instance detailsDefined in Optics.ReadOnly Methodsgetting :: Optic A_Traversal is s t a b -> Optic' (Join A_Getter A_Traversal) is s a Source # IxOptic A_Traversal s t a b Source # Instance detailsDefined in Optics.Indexed.Core MethodsnoIx :: NonEmptyIndices is => Optic A_Traversal is s t a b -> Optic A_Traversal NoIx s t a b Source #

# van Laarhoven encoding

The van Laarhoven representation of an IxTraversal directly expresses how it lifts an effectful operation I -> A -> F B on elements and their indices to act on structures S -> F T. Thus itraverseOf converts an IxTraversal to an IxTraversalVL.

type IxTraversalVL i s t a b = forall f. Applicative f => (i -> a -> f b) -> s -> f t Source #

Type synonym for a type-modifying van Laarhoven indexed traversal.

type IxTraversalVL' i s a = IxTraversalVL i s s a a Source #

Type synonym for a type-preserving van Laarhoven indexed traversal.

# Re-exports

class (FoldableWithIndex i t, Traversable t) => TraversableWithIndex i t | t -> i where Source #