lens-5: Lenses, Folds and Traversals

Control.Lens.Indexed

Description

(The classes in here need to be defined together for DefaultSignatures to work.)

Synopsis

# Indexing

class Conjoined p => Indexable i p where Source #

This class permits overloading of function application for things that also admit a notion of a key or index.

Methods

indexed :: p a b -> i -> a -> b Source #

Build a function from an indexed function.

#### Instances

Instances details
 i ~ j => Indexable i (Indexed j) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsindexed :: Indexed j a b -> i -> a -> b Source # Indexable i ((->) :: Type -> Type -> Type) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsindexed :: (a -> b) -> i -> a -> b Source #

class (Choice p, Corepresentable p, Comonad (Corep p), Traversable (Corep p), Strong p, Representable p, Monad (Rep p), MonadFix (Rep p), Distributive (Rep p), Costrong p, ArrowLoop p, ArrowApply p, ArrowChoice p, Closed p) => Conjoined p where Source #

This is a Profunctor that is both Corepresentable by f and Representable by g such that f is left adjoint to g. From this you can derive a lot of structure due to the preservation of limits and colimits.

Minimal complete definition

Nothing

Methods

distrib :: Functor f => p a b -> p (f a) (f b) Source #

Conjoined is strong enough to let us distribute every Conjoined Profunctor over every Haskell Functor. This is effectively a generalization of fmap.

conjoined :: (p ~ (->) => q (a -> b) r) -> q (p a b) r -> q (p a b) r Source #

This permits us to make a decision at an outermost point about whether or not we use an index.

Ideally any use of this function should be done in such a way so that you compute the same answer, but this cannot be enforced at the type level.

#### Instances

Instances details
 Source # Instance detailsDefined in Control.Lens.Reified Methodsdistrib :: Functor f => ReifiedGetter a b -> ReifiedGetter (f a) (f b) Source #conjoined :: (ReifiedGetter ~ (->) => q (a -> b) r) -> q (ReifiedGetter a b) r -> q (ReifiedGetter a b) r Source # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsdistrib :: Functor f => Indexed i a b -> Indexed i (f a) (f b) Source #conjoined :: (Indexed i ~ (->) => q (a -> b) r) -> q (Indexed i a b) r -> q (Indexed i a b) r Source # Conjoined ((->) :: Type -> Type -> Type) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsdistrib :: Functor f => (a -> b) -> f a -> f b Source #conjoined :: ((->) ~ (->) => q (a -> b) r) -> q (a -> b) r -> q (a -> b) r Source #

newtype Indexed i a b Source #

A function with access to a index. This constructor may be useful when you need to store an Indexable in a container to avoid ImpredicativeTypes.

index :: Indexed i a b -> i -> a -> b

Constructors

 Indexed FieldsrunIndexed :: i -> a -> b

#### Instances

Instances details
 i ~ j => Indexable i (Indexed j) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsindexed :: Indexed j a b -> i -> a -> b Source # Arrow (Indexed i) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsarr :: (b -> c) -> Indexed i b c #first :: Indexed i b c -> Indexed i (b, d) (c, d) #second :: Indexed i b c -> Indexed i (d, b) (d, c) #(***) :: Indexed i b c -> Indexed i b' c' -> Indexed i (b, b') (c, c') #(&&&) :: Indexed i b c -> Indexed i b c' -> Indexed i b (c, c') # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsleft :: Indexed i b c -> Indexed i (Either b d) (Either c d) #right :: Indexed i b c -> Indexed i (Either d b) (Either d c) #(+++) :: Indexed i b c -> Indexed i b' c' -> Indexed i (Either b b') (Either c c') #(|||) :: Indexed i b d -> Indexed i c d -> Indexed i (Either b c) d # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsapp :: Indexed i (Indexed i b c, b) c # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsloop :: Indexed i (b, d) (c, d) -> Indexed i b c # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsdimap :: (a -> b) -> (c -> d) -> Indexed i b c -> Indexed i a d #lmap :: (a -> b) -> Indexed i b c -> Indexed i a c #rmap :: (b -> c) -> Indexed i a b -> Indexed i a c #(#.) :: forall a b c q. Coercible c b => q b c -> Indexed i a b -> Indexed i a c #(.#) :: forall a b c q. Coercible b a => Indexed i b c -> q a b -> Indexed i a c # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Associated Typestype Rep (Indexed i) :: Type -> Type # Methodstabulate :: (d -> Rep (Indexed i) c) -> Indexed i d c # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Associated Typestype Corep (Indexed i) :: Type -> Type # Methodscotabulate :: (Corep (Indexed i) d -> c) -> Indexed i d c # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsleft' :: Indexed i a b -> Indexed i (Either a c) (Either b c) #right' :: Indexed i a b -> Indexed i (Either c a) (Either c b) # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsclosed :: Indexed i a b -> Indexed i (x -> a) (x -> b) # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsfirst' :: Indexed i a b -> Indexed i (a, c) (b, c) #second' :: Indexed i a b -> Indexed i (c, a) (c, b) # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsunfirst :: Indexed i (a, d) (b, d) -> Indexed i a b #unsecond :: Indexed i (d, a) (d, b) -> Indexed i a b # Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsdistrib :: Functor f => Indexed i a b -> Indexed i (f a) (f b) Source #conjoined :: (Indexed i ~ (->) => q (a -> b) r) -> q (Indexed i a b) r -> q (Indexed i a b) r Source # Source # Instance detailsDefined in Control.Lens.Internal.Magma Methodsbazaar :: Applicative f => Indexed Int a (f b) -> Mafic a b t -> f t Source # Category (Indexed i :: Type -> Type -> Type) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsid :: forall (a :: k). Indexed i a a #(.) :: forall (b :: k) (c :: k) (a :: k). Indexed i b c -> Indexed i a b -> Indexed i a c # Cosieve (Indexed i) ((,) i) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodscosieve :: Indexed i a b -> (i, a) -> b # Sellable (Indexed i) (Molten i) Source # Instance detailsDefined in Control.Lens.Internal.Magma Methodssell :: Indexed i a (Molten i a b b) Source # Bizarre (Indexed i) (Molten i) Source # Instance detailsDefined in Control.Lens.Internal.Magma Methodsbazaar :: Applicative f => Indexed i a (f b) -> Molten i a b t -> f t Source # Sieve (Indexed i) ((->) i :: Type -> Type) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodssieve :: Indexed i a b -> a -> i -> b # Monad (Indexed i a) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methods(>>=) :: Indexed i a a0 -> (a0 -> Indexed i a b) -> Indexed i a b #(>>) :: Indexed i a a0 -> Indexed i a b -> Indexed i a b #return :: a0 -> Indexed i a a0 # Functor (Indexed i a) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsfmap :: (a0 -> b) -> Indexed i a a0 -> Indexed i a b #(<$) :: a0 -> Indexed i a b -> Indexed i a a0 # MonadFix (Indexed i a) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodsmfix :: (a0 -> Indexed i a a0) -> Indexed i a a0 # Applicative (Indexed i a) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methodspure :: a0 -> Indexed i a a0 #(<*>) :: Indexed i a (a0 -> b) -> Indexed i a a0 -> Indexed i a b #liftA2 :: (a0 -> b -> c) -> Indexed i a a0 -> Indexed i a b -> Indexed i a c #(*>) :: Indexed i a a0 -> Indexed i a b -> Indexed i a b #(<*) :: Indexed i a a0 -> Indexed i a b -> Indexed i a a0 # Apply (Indexed i a) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methods(<.>) :: Indexed i a (a0 -> b) -> Indexed i a a0 -> Indexed i a b #(.>) :: Indexed i a a0 -> Indexed i a b -> Indexed i a b #(<.) :: Indexed i a a0 -> Indexed i a b -> Indexed i a a0 #liftF2 :: (a0 -> b -> c) -> Indexed i a a0 -> Indexed i a b -> Indexed i a c # Bind (Indexed i a) Source # Instance detailsDefined in Control.Lens.Internal.Indexed Methods(>>-) :: Indexed i a a0 -> (a0 -> Indexed i a b) -> Indexed i a b #join :: Indexed i a (Indexed i a a0) -> Indexed i a a0 # type Rep (Indexed i) Source # Instance detailsDefined in Control.Lens.Internal.Indexed type Rep (Indexed i) = (->) i :: Type -> Type type Corep (Indexed i) Source # Instance detailsDefined in Control.Lens.Internal.Indexed type Corep (Indexed i) = (,) i (<.) :: Indexable i p => (Indexed i s t -> r) -> ((a -> b) -> s -> t) -> p a b -> r infixr 9 Source # Compose an Indexed function with a non-indexed function. Mnemonically, the < points to the indexing we want to preserve. >>> let nestedMap = (fmap Map.fromList . Map.fromList) [(1, [(10, "one,ten"), (20, "one,twenty")]), (2, [(30, "two,thirty"), (40,"two,forty")])] >>> nestedMap^..(itraversed<.itraversed).withIndex [(1,"one,ten"),(1,"one,twenty"),(2,"two,thirty"),(2,"two,forty")]  (<.>) :: Indexable (i, j) p => (Indexed i s t -> r) -> (Indexed j a b -> s -> t) -> p a b -> r infixr 9 Source # Composition of Indexed functions. Mnemonically, the < and > points to the fact that we want to preserve the indices. >>> let nestedMap = (fmap Map.fromList . Map.fromList) [(1, [(10, "one,ten"), (20, "one,twenty")]), (2, [(30, "two,thirty"), (40,"two,forty")])] >>> nestedMap^..(itraversed<.>itraversed).withIndex [((1,10),"one,ten"),((1,20),"one,twenty"),((2,30),"two,thirty"),((2,40),"two,forty")]  (.>) :: (st -> r) -> (kab -> st) -> kab -> r infixr 9 Source # Compose a non-indexed function with an Indexed function. Mnemonically, the > points to the indexing we want to preserve. This is the same as (.). f . g (and f .> g) gives you the index of g unless g is index-preserving, like a Prism, Iso or Equality, in which case it'll pass through the index of f. >>> let nestedMap = (fmap Map.fromList . Map.fromList) [(1, [(10, "one,ten"), (20, "one,twenty")]), (2, [(30, "two,thirty"), (40,"two,forty")])] >>> nestedMap^..(itraversed.>itraversed).withIndex [(10,"one,ten"),(20,"one,twenty"),(30,"two,thirty"),(40,"two,forty")]  selfIndex :: Indexable a p => p a fb -> a -> fb Source # Use a value itself as its own index. This is essentially an indexed version of id. Note: When used to modify the value, this can break the index requirements assumed by indices and similar, so this is only properly an IndexedGetter, but it can be used as more. selfIndex :: IndexedGetter a a b  reindexed :: Indexable j p => (i -> j) -> (Indexed i a b -> r) -> p a b -> r Source # Remap the index. icompose :: Indexable p c => (i -> j -> p) -> (Indexed i s t -> r) -> (Indexed j a b -> s -> t) -> c a b -> r Source # Composition of Indexed functions with a user supplied function for combining indices. indexing :: Indexable Int p => ((a -> Indexing f b) -> s -> Indexing f t) -> p a (f b) -> s -> f t Source # Transform a Traversal into an IndexedTraversal or a Fold into an IndexedFold, etc. indexing :: Traversal s t a b -> IndexedTraversal Int s t a b indexing :: Prism s t a b -> IndexedTraversal Int s t a b indexing :: Lens s t a b -> IndexedLens Int s t a b indexing :: Iso s t a b -> IndexedLens Int s t a b indexing :: Fold s a -> IndexedFold Int s a indexing :: Getter s a -> IndexedGetter Int s a  indexing :: Indexable Int p => LensLike (Indexing f) s t a b -> Over p f s t a b indexing64 :: Indexable Int64 p => ((a -> Indexing64 f b) -> s -> Indexing64 f t) -> p a (f b) -> s -> f t Source # Transform a Traversal into an IndexedTraversal or a Fold into an IndexedFold, etc. This combinator is like indexing except that it handles large traversals and folds gracefully. indexing64 :: Traversal s t a b -> IndexedTraversal Int64 s t a b indexing64 :: Prism s t a b -> IndexedTraversal Int64 s t a b indexing64 :: Lens s t a b -> IndexedLens Int64 s t a b indexing64 :: Iso s t a b -> IndexedLens Int64 s t a b indexing64 :: Fold s a -> IndexedFold Int64 s a indexing64 :: Getter s a -> IndexedGetter Int64 s a  indexing64 :: Indexable Int64 p => LensLike (Indexing64 f) s t a b -> Over p f s t a b # Indexed Functors class Functor f => FunctorWithIndex i (f :: Type -> Type) | f -> i where # A Functor with an additional index. Instances must satisfy a modified form of the Functor laws: imap f . imap g ≡ imap (\i -> f i . g i) imap (\_ a -> a) ≡ id  Minimal complete definition Nothing Methods imap :: (i -> a -> b) -> f a -> f b # Map with access to the index. #### Instances Instances details  The position in the list is available as the index. Instance detailsDefined in WithIndex Methodsimap :: (Int -> a -> b) -> [a] -> [b] # Same instance as for []. Instance detailsDefined in WithIndex Methodsimap :: (Int -> a -> b) -> ZipList a -> ZipList b # Instance detailsDefined in WithIndex Methodsimap :: (Int -> a -> b) -> NonEmpty a -> NonEmpty b # Instance detailsDefined in WithIndex Methodsimap :: (Int -> a -> b) -> IntMap a -> IntMap b # The position in the Seq is available as the index. Instance detailsDefined in WithIndex Methodsimap :: (Int -> a -> b) -> Seq a -> Seq b # Source # Instance detailsDefined in Control.Lens.Internal.Deque Methodsimap :: (Int -> a -> b) -> Deque a -> Deque b # Instance detailsDefined in WithIndex Methodsimap :: (() -> a -> b) -> Maybe a -> Maybe b # Instance detailsDefined in WithIndex Methodsimap :: (() -> a -> b) -> Par1 a -> Par1 b # Instance detailsDefined in WithIndex Methodsimap :: (() -> a -> b) -> Identity a -> Identity b # Source # Instance detailsDefined in Control.Lens.Internal.Level Methodsimap :: (i -> a -> b) -> Level i a -> Level i b # FunctorWithIndex k (Map k) Instance detailsDefined in WithIndex Methodsimap :: (k -> a -> b) -> Map k a -> Map k b # FunctorWithIndex k ((,) k) Instance detailsDefined in WithIndex Methodsimap :: (k -> a -> b) -> (k, a) -> (k, b) # Ix i => FunctorWithIndex i (Array i) Instance detailsDefined in WithIndex Methodsimap :: (i -> a -> b) -> Array i a -> Array i b # Instance detailsDefined in WithIndex Methodsimap :: (Void -> a -> b) -> V1 a -> V1 b # Instance detailsDefined in WithIndex Methodsimap :: (Void -> a -> b) -> U1 a -> U1 b # Instance detailsDefined in WithIndex Methodsimap :: (Void -> a -> b) -> Proxy a -> Proxy b # FunctorWithIndex i f => FunctorWithIndex i (Reverse f) Instance detailsDefined in WithIndex Methodsimap :: (i -> a -> b) -> Reverse f a -> Reverse f b # FunctorWithIndex i f => FunctorWithIndex i (Rec1 f) Instance detailsDefined in WithIndex Methodsimap :: (i -> a -> b) -> Rec1 f a -> Rec1 f b # FunctorWithIndex i m => FunctorWithIndex i (IdentityT m) Instance detailsDefined in WithIndex Methodsimap :: (i -> a -> b) -> IdentityT m a -> IdentityT m b # FunctorWithIndex i f => FunctorWithIndex i (Backwards f) Instance detailsDefined in WithIndex Methodsimap :: (i -> a -> b) -> Backwards f a -> Backwards f b # Instance detailsDefined in WithIndex Methodsimap :: (Void -> a -> b) -> Const e a -> Const e b # Instance detailsDefined in WithIndex Methodsimap :: (Void -> a -> b) -> Constant e a -> Constant e b # FunctorWithIndex i (Magma i t b) Source # Instance detailsDefined in Control.Lens.Internal.Magma Methodsimap :: (i -> a -> b0) -> Magma i t b a -> Magma i t b b0 # FunctorWithIndex r ((->) r :: Type -> Type) Instance detailsDefined in WithIndex Methodsimap :: (r -> a -> b) -> (r -> a) -> r -> b # FunctorWithIndex Void (K1 i c :: Type -> Type) Instance detailsDefined in WithIndex Methodsimap :: (Void -> a -> b) -> K1 i c a -> K1 i c b # Instance detailsDefined in WithIndex Methodsimap :: ([Int] -> a -> b) -> Tree a -> Tree b # FunctorWithIndex i f => FunctorWithIndex [i] (Free f) Instance detailsDefined in Control.Monad.Free Methodsimap :: ([i] -> a -> b) -> Free f a -> Free f b # FunctorWithIndex i f => FunctorWithIndex [i] (Cofree f) Instance detailsDefined in Control.Comonad.Cofree Methodsimap :: ([i] -> a -> b) -> Cofree f a -> Cofree f b # FunctorWithIndex i w => FunctorWithIndex (s, i) (TracedT s w) Instance detailsDefined in Control.Comonad.Trans.Traced Methodsimap :: ((s, i) -> a -> b) -> TracedT s w a -> TracedT s w b # FunctorWithIndex i m => FunctorWithIndex (e, i) (ReaderT e m) Instance detailsDefined in WithIndex Methodsimap :: ((e, i) -> a -> b) -> ReaderT e m a -> ReaderT e m b # (FunctorWithIndex i f, FunctorWithIndex j g) => FunctorWithIndex (Either i j) (Sum f g) Instance detailsDefined in WithIndex Methodsimap :: (Either i j -> a -> b) -> Sum f g a -> Sum f g b # (FunctorWithIndex i f, FunctorWithIndex j g) => FunctorWithIndex (Either i j) (Product f g) Instance detailsDefined in WithIndex Methodsimap :: (Either i j -> a -> b) -> Product f g a -> Product f g b # (FunctorWithIndex i f, FunctorWithIndex j g) => FunctorWithIndex (Either i j) (f :+: g) Instance detailsDefined in WithIndex Methodsimap :: (Either i j -> a -> b) -> (f :+: g) a -> (f :+: g) b # (FunctorWithIndex i f, FunctorWithIndex j g) => FunctorWithIndex (Either i j) (f :*: g) Instance detailsDefined in WithIndex Methodsimap :: (Either i j -> a -> b) -> (f :*: g) a -> (f :*: g) b # (FunctorWithIndex i f, FunctorWithIndex j g) => FunctorWithIndex (i, j) (Compose f g) Instance detailsDefined in WithIndex Methodsimap :: ((i, j) -> a -> b) -> Compose f g a -> Compose f g b # (FunctorWithIndex i f, FunctorWithIndex j g) => FunctorWithIndex (i, j) (f :.: g) Instance detailsDefined in WithIndex Methodsimap :: ((i, j) -> a -> b) -> (f :.: g) a -> (f :.: g) b # ## Indexed Functor Combinators imapped :: FunctorWithIndex i f => IndexedSetter i (f a) (f b) a b Source # The IndexedSetter for a FunctorWithIndex. If you don't need access to the index, then mapped is more flexible in what it accepts. # Indexed Foldables class Foldable f => FoldableWithIndex i (f :: Type -> Type) | f -> i where # A container that supports folding with an additional index. Minimal complete definition Nothing Methods ifoldMap :: Monoid m => (i -> a -> m) -> f a -> m # Fold a container by mapping value to an arbitrary Monoid with access to the index i. When you don't need access to the index then foldMap is more flexible in what it accepts. foldMap ≡ ifoldMap . const  ifoldMap' :: Monoid m => (i -> a -> m) -> f a -> m # A variant of ifoldMap that is strict in the accumulator. ifoldr :: (i -> a -> b -> b) -> b -> f a -> b # Right-associative fold of an indexed container with access to the index i. When you don't need access to the index then foldr is more flexible in what it accepts. foldr ≡ ifoldr . const  ifoldl :: (i -> b -> a -> b) -> b -> f a -> b # Left-associative fold of an indexed container with access to the index i. When you don't need access to the index then foldl is more flexible in what it accepts. foldl ≡ ifoldl . const  ifoldr' :: (i -> a -> b -> b) -> b -> f a -> b # Strictly fold right over the elements of a structure with access to the index i. When you don't need access to the index then foldr' is more flexible in what it accepts. foldr' ≡ ifoldr' . const  ifoldl' :: (i -> b -> a -> b) -> b -> f a -> b # Fold over the elements of a structure with an index, associating to the left, but strictly. When you don't need access to the index then foldlOf' is more flexible in what it accepts. foldlOf' l ≡ ifoldlOf' l . const  #### Instances Instances details  Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Int -> a -> m) -> [a] -> m #ifoldMap' :: Monoid m => (Int -> a -> m) -> [a] -> m #ifoldr :: (Int -> a -> b -> b) -> b -> [a] -> b #ifoldl :: (Int -> b -> a -> b) -> b -> [a] -> b #ifoldr' :: (Int -> a -> b -> b) -> b -> [a] -> b #ifoldl' :: (Int -> b -> a -> b) -> b -> [a] -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Int -> a -> m) -> ZipList a -> m #ifoldMap' :: Monoid m => (Int -> a -> m) -> ZipList a -> m #ifoldr :: (Int -> a -> b -> b) -> b -> ZipList a -> b #ifoldl :: (Int -> b -> a -> b) -> b -> ZipList a -> b #ifoldr' :: (Int -> a -> b -> b) -> b -> ZipList a -> b #ifoldl' :: (Int -> b -> a -> b) -> b -> ZipList a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Int -> a -> m) -> NonEmpty a -> m #ifoldMap' :: Monoid m => (Int -> a -> m) -> NonEmpty a -> m #ifoldr :: (Int -> a -> b -> b) -> b -> NonEmpty a -> b #ifoldl :: (Int -> b -> a -> b) -> b -> NonEmpty a -> b #ifoldr' :: (Int -> a -> b -> b) -> b -> NonEmpty a -> b #ifoldl' :: (Int -> b -> a -> b) -> b -> NonEmpty a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Int -> a -> m) -> IntMap a -> m #ifoldMap' :: Monoid m => (Int -> a -> m) -> IntMap a -> m #ifoldr :: (Int -> a -> b -> b) -> b -> IntMap a -> b #ifoldl :: (Int -> b -> a -> b) -> b -> IntMap a -> b #ifoldr' :: (Int -> a -> b -> b) -> b -> IntMap a -> b #ifoldl' :: (Int -> b -> a -> b) -> b -> IntMap a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Int -> a -> m) -> Seq a -> m #ifoldMap' :: Monoid m => (Int -> a -> m) -> Seq a -> m #ifoldr :: (Int -> a -> b -> b) -> b -> Seq a -> b #ifoldl :: (Int -> b -> a -> b) -> b -> Seq a -> b #ifoldr' :: (Int -> a -> b -> b) -> b -> Seq a -> b #ifoldl' :: (Int -> b -> a -> b) -> b -> Seq a -> b # Source # Instance detailsDefined in Control.Lens.Internal.Deque MethodsifoldMap :: Monoid m => (Int -> a -> m) -> Deque a -> m #ifoldMap' :: Monoid m => (Int -> a -> m) -> Deque a -> m #ifoldr :: (Int -> a -> b -> b) -> b -> Deque a -> b #ifoldl :: (Int -> b -> a -> b) -> b -> Deque a -> b #ifoldr' :: (Int -> a -> b -> b) -> b -> Deque a -> b #ifoldl' :: (Int -> b -> a -> b) -> b -> Deque a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (() -> a -> m) -> Maybe a -> m #ifoldMap' :: Monoid m => (() -> a -> m) -> Maybe a -> m #ifoldr :: (() -> a -> b -> b) -> b -> Maybe a -> b #ifoldl :: (() -> b -> a -> b) -> b -> Maybe a -> b #ifoldr' :: (() -> a -> b -> b) -> b -> Maybe a -> b #ifoldl' :: (() -> b -> a -> b) -> b -> Maybe a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (() -> a -> m) -> Par1 a -> m #ifoldMap' :: Monoid m => (() -> a -> m) -> Par1 a -> m #ifoldr :: (() -> a -> b -> b) -> b -> Par1 a -> b #ifoldl :: (() -> b -> a -> b) -> b -> Par1 a -> b #ifoldr' :: (() -> a -> b -> b) -> b -> Par1 a -> b #ifoldl' :: (() -> b -> a -> b) -> b -> Par1 a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (() -> a -> m) -> Identity a -> m #ifoldMap' :: Monoid m => (() -> a -> m) -> Identity a -> m #ifoldr :: (() -> a -> b -> b) -> b -> Identity a -> b #ifoldl :: (() -> b -> a -> b) -> b -> Identity a -> b #ifoldr' :: (() -> a -> b -> b) -> b -> Identity a -> b #ifoldl' :: (() -> b -> a -> b) -> b -> Identity a -> b # Source # Instance detailsDefined in Control.Lens.Internal.Level MethodsifoldMap :: Monoid m => (i -> a -> m) -> Level i a -> m #ifoldMap' :: Monoid m => (i -> a -> m) -> Level i a -> m #ifoldr :: (i -> a -> b -> b) -> b -> Level i a -> b #ifoldl :: (i -> b -> a -> b) -> b -> Level i a -> b #ifoldr' :: (i -> a -> b -> b) -> b -> Level i a -> b #ifoldl' :: (i -> b -> a -> b) -> b -> Level i a -> b # FoldableWithIndex k (Map k) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (k -> a -> m) -> Map k a -> m #ifoldMap' :: Monoid m => (k -> a -> m) -> Map k a -> m #ifoldr :: (k -> a -> b -> b) -> b -> Map k a -> b #ifoldl :: (k -> b -> a -> b) -> b -> Map k a -> b #ifoldr' :: (k -> a -> b -> b) -> b -> Map k a -> b #ifoldl' :: (k -> b -> a -> b) -> b -> Map k a -> b # FoldableWithIndex k ((,) k) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (k -> a -> m) -> (k, a) -> m #ifoldMap' :: Monoid m => (k -> a -> m) -> (k, a) -> m #ifoldr :: (k -> a -> b -> b) -> b -> (k, a) -> b #ifoldl :: (k -> b -> a -> b) -> b -> (k, a) -> b #ifoldr' :: (k -> a -> b -> b) -> b -> (k, a) -> b #ifoldl' :: (k -> b -> a -> b) -> b -> (k, a) -> b # Ix i => FoldableWithIndex i (Array i) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (i -> a -> m) -> Array i a -> m #ifoldMap' :: Monoid m => (i -> a -> m) -> Array i a -> m #ifoldr :: (i -> a -> b -> b) -> b -> Array i a -> b #ifoldl :: (i -> b -> a -> b) -> b -> Array i a -> b #ifoldr' :: (i -> a -> b -> b) -> b -> Array i a -> b #ifoldl' :: (i -> b -> a -> b) -> b -> Array i a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Void -> a -> m) -> V1 a -> m #ifoldMap' :: Monoid m => (Void -> a -> m) -> V1 a -> m #ifoldr :: (Void -> a -> b -> b) -> b -> V1 a -> b #ifoldl :: (Void -> b -> a -> b) -> b -> V1 a -> b #ifoldr' :: (Void -> a -> b -> b) -> b -> V1 a -> b #ifoldl' :: (Void -> b -> a -> b) -> b -> V1 a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Void -> a -> m) -> U1 a -> m #ifoldMap' :: Monoid m => (Void -> a -> m) -> U1 a -> m #ifoldr :: (Void -> a -> b -> b) -> b -> U1 a -> b #ifoldl :: (Void -> b -> a -> b) -> b -> U1 a -> b #ifoldr' :: (Void -> a -> b -> b) -> b -> U1 a -> b #ifoldl' :: (Void -> b -> a -> b) -> b -> U1 a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Void -> a -> m) -> Proxy a -> m #ifoldMap' :: Monoid m => (Void -> a -> m) -> Proxy a -> m #ifoldr :: (Void -> a -> b -> b) -> b -> Proxy a -> b #ifoldl :: (Void -> b -> a -> b) -> b -> Proxy a -> b #ifoldr' :: (Void -> a -> b -> b) -> b -> Proxy a -> b #ifoldl' :: (Void -> b -> a -> b) -> b -> Proxy a -> b # FoldableWithIndex i f => FoldableWithIndex i (Reverse f) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (i -> a -> m) -> Reverse f a -> m #ifoldMap' :: Monoid m => (i -> a -> m) -> Reverse f a -> m #ifoldr :: (i -> a -> b -> b) -> b -> Reverse f a -> b #ifoldl :: (i -> b -> a -> b) -> b -> Reverse f a -> b #ifoldr' :: (i -> a -> b -> b) -> b -> Reverse f a -> b #ifoldl' :: (i -> b -> a -> b) -> b -> Reverse f a -> b # FoldableWithIndex i f => FoldableWithIndex i (Rec1 f) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (i -> a -> m) -> Rec1 f a -> m #ifoldMap' :: Monoid m => (i -> a -> m) -> Rec1 f a -> m #ifoldr :: (i -> a -> b -> b) -> b -> Rec1 f a -> b #ifoldl :: (i -> b -> a -> b) -> b -> Rec1 f a -> b #ifoldr' :: (i -> a -> b -> b) -> b -> Rec1 f a -> b #ifoldl' :: (i -> b -> a -> b) -> b -> Rec1 f a -> b # FoldableWithIndex i m => FoldableWithIndex i (IdentityT m) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m0 => (i -> a -> m0) -> IdentityT m a -> m0 #ifoldMap' :: Monoid m0 => (i -> a -> m0) -> IdentityT m a -> m0 #ifoldr :: (i -> a -> b -> b) -> b -> IdentityT m a -> b #ifoldl :: (i -> b -> a -> b) -> b -> IdentityT m a -> b #ifoldr' :: (i -> a -> b -> b) -> b -> IdentityT m a -> b #ifoldl' :: (i -> b -> a -> b) -> b -> IdentityT m a -> b # FoldableWithIndex i f => FoldableWithIndex i (Backwards f) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (i -> a -> m) -> Backwards f a -> m #ifoldMap' :: Monoid m => (i -> a -> m) -> Backwards f a -> m #ifoldr :: (i -> a -> b -> b) -> b -> Backwards f a -> b #ifoldl :: (i -> b -> a -> b) -> b -> Backwards f a -> b #ifoldr' :: (i -> a -> b -> b) -> b -> Backwards f a -> b #ifoldl' :: (i -> b -> a -> b) -> b -> Backwards f a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Void -> a -> m) -> Const e a -> m #ifoldMap' :: Monoid m => (Void -> a -> m) -> Const e a -> m #ifoldr :: (Void -> a -> b -> b) -> b -> Const e a -> b #ifoldl :: (Void -> b -> a -> b) -> b -> Const e a -> b #ifoldr' :: (Void -> a -> b -> b) -> b -> Const e a -> b #ifoldl' :: (Void -> b -> a -> b) -> b -> Const e a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Void -> a -> m) -> Constant e a -> m #ifoldMap' :: Monoid m => (Void -> a -> m) -> Constant e a -> m #ifoldr :: (Void -> a -> b -> b) -> b -> Constant e a -> b #ifoldl :: (Void -> b -> a -> b) -> b -> Constant e a -> b #ifoldr' :: (Void -> a -> b -> b) -> b -> Constant e a -> b #ifoldl' :: (Void -> b -> a -> b) -> b -> Constant e a -> b # FoldableWithIndex i (Magma i t b) Source # Instance detailsDefined in Control.Lens.Internal.Magma MethodsifoldMap :: Monoid m => (i -> a -> m) -> Magma i t b a -> m #ifoldMap' :: Monoid m => (i -> a -> m) -> Magma i t b a -> m #ifoldr :: (i -> a -> b0 -> b0) -> b0 -> Magma i t b a -> b0 #ifoldl :: (i -> b0 -> a -> b0) -> b0 -> Magma i t b a -> b0 #ifoldr' :: (i -> a -> b0 -> b0) -> b0 -> Magma i t b a -> b0 #ifoldl' :: (i -> b0 -> a -> b0) -> b0 -> Magma i t b a -> b0 # FoldableWithIndex Void (K1 i c :: Type -> Type) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Void -> a -> m) -> K1 i c a -> m #ifoldMap' :: Monoid m => (Void -> a -> m) -> K1 i c a -> m #ifoldr :: (Void -> a -> b -> b) -> b -> K1 i c a -> b #ifoldl :: (Void -> b -> a -> b) -> b -> K1 i c a -> b #ifoldr' :: (Void -> a -> b -> b) -> b -> K1 i c a -> b #ifoldl' :: (Void -> b -> a -> b) -> b -> K1 i c a -> b # Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => ([Int] -> a -> m) -> Tree a -> m #ifoldMap' :: Monoid m => ([Int] -> a -> m) -> Tree a -> m #ifoldr :: ([Int] -> a -> b -> b) -> b -> Tree a -> b #ifoldl :: ([Int] -> b -> a -> b) -> b -> Tree a -> b #ifoldr' :: ([Int] -> a -> b -> b) -> b -> Tree a -> b #ifoldl' :: ([Int] -> b -> a -> b) -> b -> Tree a -> b # FoldableWithIndex i f => FoldableWithIndex [i] (Free f) Instance detailsDefined in Control.Monad.Free MethodsifoldMap :: Monoid m => ([i] -> a -> m) -> Free f a -> m #ifoldMap' :: Monoid m => ([i] -> a -> m) -> Free f a -> m #ifoldr :: ([i] -> a -> b -> b) -> b -> Free f a -> b #ifoldl :: ([i] -> b -> a -> b) -> b -> Free f a -> b #ifoldr' :: ([i] -> a -> b -> b) -> b -> Free f a -> b #ifoldl' :: ([i] -> b -> a -> b) -> b -> Free f a -> b # FoldableWithIndex i f => FoldableWithIndex [i] (Cofree f) Instance detailsDefined in Control.Comonad.Cofree MethodsifoldMap :: Monoid m => ([i] -> a -> m) -> Cofree f a -> m #ifoldMap' :: Monoid m => ([i] -> a -> m) -> Cofree f a -> m #ifoldr :: ([i] -> a -> b -> b) -> b -> Cofree f a -> b #ifoldl :: ([i] -> b -> a -> b) -> b -> Cofree f a -> b #ifoldr' :: ([i] -> a -> b -> b) -> b -> Cofree f a -> b #ifoldl' :: ([i] -> b -> a -> b) -> b -> Cofree f a -> b # (FoldableWithIndex i f, FoldableWithIndex j g) => FoldableWithIndex (Either i j) (Sum f g) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Either i j -> a -> m) -> Sum f g a -> m #ifoldMap' :: Monoid m => (Either i j -> a -> m) -> Sum f g a -> m #ifoldr :: (Either i j -> a -> b -> b) -> b -> Sum f g a -> b #ifoldl :: (Either i j -> b -> a -> b) -> b -> Sum f g a -> b #ifoldr' :: (Either i j -> a -> b -> b) -> b -> Sum f g a -> b #ifoldl' :: (Either i j -> b -> a -> b) -> b -> Sum f g a -> b # (FoldableWithIndex i f, FoldableWithIndex j g) => FoldableWithIndex (Either i j) (Product f g) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Either i j -> a -> m) -> Product f g a -> m #ifoldMap' :: Monoid m => (Either i j -> a -> m) -> Product f g a -> m #ifoldr :: (Either i j -> a -> b -> b) -> b -> Product f g a -> b #ifoldl :: (Either i j -> b -> a -> b) -> b -> Product f g a -> b #ifoldr' :: (Either i j -> a -> b -> b) -> b -> Product f g a -> b #ifoldl' :: (Either i j -> b -> a -> b) -> b -> Product f g a -> b # (FoldableWithIndex i f, FoldableWithIndex j g) => FoldableWithIndex (Either i j) (f :+: g) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Either i j -> a -> m) -> (f :+: g) a -> m #ifoldMap' :: Monoid m => (Either i j -> a -> m) -> (f :+: g) a -> m #ifoldr :: (Either i j -> a -> b -> b) -> b -> (f :+: g) a -> b #ifoldl :: (Either i j -> b -> a -> b) -> b -> (f :+: g) a -> b #ifoldr' :: (Either i j -> a -> b -> b) -> b -> (f :+: g) a -> b #ifoldl' :: (Either i j -> b -> a -> b) -> b -> (f :+: g) a -> b # (FoldableWithIndex i f, FoldableWithIndex j g) => FoldableWithIndex (Either i j) (f :*: g) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => (Either i j -> a -> m) -> (f :*: g) a -> m #ifoldMap' :: Monoid m => (Either i j -> a -> m) -> (f :*: g) a -> m #ifoldr :: (Either i j -> a -> b -> b) -> b -> (f :*: g) a -> b #ifoldl :: (Either i j -> b -> a -> b) -> b -> (f :*: g) a -> b #ifoldr' :: (Either i j -> a -> b -> b) -> b -> (f :*: g) a -> b #ifoldl' :: (Either i j -> b -> a -> b) -> b -> (f :*: g) a -> b # (FoldableWithIndex i f, FoldableWithIndex j g) => FoldableWithIndex (i, j) (Compose f g) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => ((i, j) -> a -> m) -> Compose f g a -> m #ifoldMap' :: Monoid m => ((i, j) -> a -> m) -> Compose f g a -> m #ifoldr :: ((i, j) -> a -> b -> b) -> b -> Compose f g a -> b #ifoldl :: ((i, j) -> b -> a -> b) -> b -> Compose f g a -> b #ifoldr' :: ((i, j) -> a -> b -> b) -> b -> Compose f g a -> b #ifoldl' :: ((i, j) -> b -> a -> b) -> b -> Compose f g a -> b # (FoldableWithIndex i f, FoldableWithIndex j g) => FoldableWithIndex (i, j) (f :.: g) Instance detailsDefined in WithIndex MethodsifoldMap :: Monoid m => ((i, j) -> a -> m) -> (f :.: g) a -> m #ifoldMap' :: Monoid m => ((i, j) -> a -> m) -> (f :.: g) a -> m #ifoldr :: ((i, j) -> a -> b -> b) -> b -> (f :.: g) a -> b #ifoldl :: ((i, j) -> b -> a -> b) -> b -> (f :.: g) a -> b #ifoldr' :: ((i, j) -> a -> b -> b) -> b -> (f :.: g) a -> b #ifoldl' :: ((i, j) -> b -> a -> b) -> b -> (f :.: g) a -> b # ## Indexed Foldable Combinators ifolded :: FoldableWithIndex i f => IndexedFold i (f a) a Source # The IndexedFold of a FoldableWithIndex container. ifolded . asIndex is a fold over the keys of a FoldableWithIndex. >>> Data.Map.fromList [(2, "hello"), (1, "world")]^..ifolded.asIndex [1,2]  iany :: FoldableWithIndex i f => (i -> a -> Bool) -> f a -> Bool # Return whether or not any element in a container satisfies a predicate, with access to the index i. When you don't need access to the index then any is more flexible in what it accepts. any ≡ iany . const  iall :: FoldableWithIndex i f => (i -> a -> Bool) -> f a -> Bool # Return whether or not all elements in a container satisfy a predicate, with access to the index i. When you don't need access to the index then all is more flexible in what it accepts. all ≡ iall . const  inone :: FoldableWithIndex i f => (i -> a -> Bool) -> f a -> Bool # Return whether or not none of the elements in a container satisfy a predicate, with access to the index i. When you don't need access to the index then none is more flexible in what it accepts. none ≡ inone . const inone f ≡ not . iany f  none :: Foldable f => (a -> Bool) -> f a -> Bool # Determines whether no elements of the structure satisfy the predicate. none f ≡ not . any f  itraverse_ :: (FoldableWithIndex i t, Applicative f) => (i -> a -> f b) -> t a -> f () # Traverse elements with access to the index i, discarding the results. When you don't need access to the index then traverse_ is more flexible in what it accepts. traverse_ l = itraverse . const  ifor_ :: (FoldableWithIndex i t, Applicative f) => t a -> (i -> a -> f b) -> f () # Traverse elements with access to the index i, discarding the results (with the arguments flipped). ifor_ ≡ flip itraverse_  When you don't need access to the index then for_ is more flexible in what it accepts. for_ a ≡ ifor_ a . const  imapM_ :: (FoldableWithIndex i t, Monad m) => (i -> a -> m b) -> t a -> m () # Run monadic actions for each target of an IndexedFold or IndexedTraversal with access to the index, discarding the results. When you don't need access to the index then mapMOf_ is more flexible in what it accepts. mapM_ ≡ imapM . const  iforM_ :: (FoldableWithIndex i t, Monad m) => t a -> (i -> a -> m b) -> m () # Run monadic actions for each target of an IndexedFold or IndexedTraversal with access to the index, discarding the results (with the arguments flipped). iforM_ ≡ flip imapM_  When you don't need access to the index then forMOf_ is more flexible in what it accepts. forMOf_ l a ≡ iforMOf l a . const  iconcatMap :: FoldableWithIndex i f => (i -> a -> [b]) -> f a -> [b] # Concatenate the results of a function of the elements of an indexed container with access to the index. When you don't need access to the index then concatMap is more flexible in what it accepts. concatMap ≡ iconcatMap . const iconcatMap ≡ ifoldMap  ifind :: FoldableWithIndex i f => (i -> a -> Bool) -> f a -> Maybe (i, a) # Searches a container with a predicate that is also supplied the index, returning the left-most element of the structure matching the predicate, or Nothing if there is no such element. When you don't need access to the index then find is more flexible in what it accepts. find ≡ ifind . const  ifoldrM :: (FoldableWithIndex i f, Monad m) => (i -> a -> b -> m b) -> b -> f a -> m b # Monadic fold right over the elements of a structure with an index. When you don't need access to the index then foldrM is more flexible in what it accepts. foldrM ≡ ifoldrM . const  ifoldlM :: (FoldableWithIndex i f, Monad m) => (i -> b -> a -> m b) -> b -> f a -> m b # Monadic fold over the elements of a structure with an index, associating to the left. When you don't need access to the index then foldlM is more flexible in what it accepts. foldlM ≡ ifoldlM . const  itoList :: FoldableWithIndex i f => f a -> [(i, a)] # Extract the key-value pairs from a structure. When you don't need access to the indices in the result, then toList is more flexible in what it accepts. toList ≡ map snd . itoList  # Converting to Folds withIndex :: (Indexable i p, Functor f) => p (i, s) (f (j, t)) -> Indexed i s (f t) Source # Fold a container with indices returning both the indices and the values. The result is only valid to compose in a Traversal, if you don't edit the index as edits to the index have no effect. >>> [10, 20, 30] ^.. ifolded . withIndex [(0,10),(1,20),(2,30)]  >>> [10, 20, 30] ^.. ifolded . withIndex . alongside negated (re _Show) [(0,"10"),(-1,"20"),(-2,"30")]  asIndex :: (Indexable i p, Contravariant f, Functor f) => p i (f i) -> Indexed i s (f s) Source # When composed with an IndexedFold or IndexedTraversal this yields an (Indexed) Fold of the indices. # Restricting by Index indices :: (Indexable i p, Applicative f) => (i -> Bool) -> Optical' p (Indexed i) f a a Source # This allows you to filter an IndexedFold, IndexedGetter, IndexedTraversal or IndexedLens based on a predicate on the indices. >>> ["hello","the","world","!!!"]^..traversed.indices even ["hello","world"]  >>> over (traversed.indices (>0)) Prelude.reverse$ ["He","was","stressed","o_O"]
["He","saw","desserts","O_o"]


index :: (Indexable i p, Eq i, Applicative f) => i -> Optical' p (Indexed i) f a a Source #

This allows you to filter an IndexedFold, IndexedGetter, IndexedTraversal or IndexedLens based on an index.

>>> ["hello","the","world","!!!"]^?traversed.index 2
Just "world"


# Indexed Traversables

class (FunctorWithIndex i t, FoldableWithIndex i t, Traversable t) => TraversableWithIndex i (t :: Type -> Type) | t -> i where #

A Traversable with an additional index.

An instance must satisfy a (modified) form of the Traversable laws:

itraverse (const Identity) ≡ Identity
fmap (itraverse f) . itraverse g ≡ getCompose . itraverse (\i -> Compose . fmap (f i) . g i)


Minimal complete definition

Nothing

Methods

itraverse :: Applicative f => (i -> a -> f b) -> t a -> f (t b) #

Traverse an indexed container.

itraverse ≡ itraverseOf itraversed


#### Instances

Instances details
 Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Int -> a -> f b) -> [a] -> f [b] # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Int -> a -> f b) -> ZipList a -> f (ZipList b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Int -> a -> f b) -> NonEmpty a -> f (NonEmpty b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Int -> a -> f b) -> IntMap a -> f (IntMap b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Int -> a -> f b) -> Seq a -> f (Seq b) # Source # Instance detailsDefined in Control.Lens.Internal.Deque Methodsitraverse :: Applicative f => (Int -> a -> f b) -> Deque a -> f (Deque b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (() -> a -> f b) -> Maybe a -> f (Maybe b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (() -> a -> f b) -> Par1 a -> f (Par1 b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (() -> a -> f b) -> Identity a -> f (Identity b) # Source # Instance detailsDefined in Control.Lens.Internal.Level Methodsitraverse :: Applicative f => (i -> a -> f b) -> Level i a -> f (Level i b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (k -> a -> f b) -> Map k a -> f (Map k b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (k -> a -> f b) -> (k, a) -> f (k, b) # Ix i => TraversableWithIndex i (Array i) Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (i -> a -> f b) -> Array i a -> f (Array i b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Void -> a -> f b) -> V1 a -> f (V1 b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Void -> a -> f b) -> U1 a -> f (U1 b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Void -> a -> f b) -> Proxy a -> f (Proxy b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f0 => (i -> a -> f0 b) -> Reverse f a -> f0 (Reverse f b) # TraversableWithIndex i f => TraversableWithIndex i (Rec1 f) Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f0 => (i -> a -> f0 b) -> Rec1 f a -> f0 (Rec1 f b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (i -> a -> f b) -> IdentityT m a -> f (IdentityT m b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f0 => (i -> a -> f0 b) -> Backwards f a -> f0 (Backwards f b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Void -> a -> f b) -> Const e a -> f (Const e b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Void -> a -> f b) -> Constant e a -> f (Constant e b) # TraversableWithIndex i (Magma i t b) Source # Instance detailsDefined in Control.Lens.Internal.Magma Methodsitraverse :: Applicative f => (i -> a -> f b0) -> Magma i t b a -> f (Magma i t b b0) # TraversableWithIndex Void (K1 i c :: Type -> Type) Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => (Void -> a -> f b) -> K1 i c a -> f (K1 i c b) # Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f => ([Int] -> a -> f b) -> Tree a -> f (Tree b) # TraversableWithIndex i f => TraversableWithIndex [i] (Free f) Instance detailsDefined in Control.Monad.Free Methodsitraverse :: Applicative f0 => ([i] -> a -> f0 b) -> Free f a -> f0 (Free f b) # TraversableWithIndex i f => TraversableWithIndex [i] (Cofree f) Instance detailsDefined in Control.Comonad.Cofree Methodsitraverse :: Applicative f0 => ([i] -> a -> f0 b) -> Cofree f a -> f0 (Cofree f b) # (TraversableWithIndex i f, TraversableWithIndex j g) => TraversableWithIndex (Either i j) (Sum f g) Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f0 => (Either i j -> a -> f0 b) -> Sum f g a -> f0 (Sum f g b) # (TraversableWithIndex i f, TraversableWithIndex j g) => TraversableWithIndex (Either i j) (Product f g) Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f0 => (Either i j -> a -> f0 b) -> Product f g a -> f0 (Product f g b) # (TraversableWithIndex i f, TraversableWithIndex j g) => TraversableWithIndex (Either i j) (f :+: g) Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f0 => (Either i j -> a -> f0 b) -> (f :+: g) a -> f0 ((f :+: g) b) # (TraversableWithIndex i f, TraversableWithIndex j g) => TraversableWithIndex (Either i j) (f :*: g) Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f0 => (Either i j -> a -> f0 b) -> (f :*: g) a -> f0 ((f :*: g) b) # (TraversableWithIndex i f, TraversableWithIndex j g) => TraversableWithIndex (i, j) (Compose f g) Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f0 => ((i, j) -> a -> f0 b) -> Compose f g a -> f0 (Compose f g b) # (TraversableWithIndex i f, TraversableWithIndex j g) => TraversableWithIndex (i, j) (f :.: g) Instance detailsDefined in WithIndex Methodsitraverse :: Applicative f0 => ((i, j) -> a -> f0 b) -> (f :.: g) a -> f0 ((f :.: g) b) #

# Indexed Traversable Combinators

itraversed :: TraversableWithIndex i t => IndexedTraversal i (t a) (t b) a b Source #

The IndexedTraversal of a TraversableWithIndex container.

ifor :: (TraversableWithIndex i t, Applicative f) => t a -> (i -> a -> f b) -> f (t b) #

Traverse with an index (and the arguments flipped).

for a ≡ ifor a . const
ifor ≡ flip itraverse


imapM :: (TraversableWithIndex i t, Monad m) => (i -> a -> m b) -> t a -> m (t b) #

Map each element of a structure to a monadic action, evaluate these actions from left to right, and collect the results, with access the index.

When you don't need access to the index mapM is more liberal in what it can accept.

mapM ≡ imapM . const


iforM :: (TraversableWithIndex i t, Monad m) => t a -> (i -> a -> m b) -> m (t b) #

Map each element of a structure to a monadic action, evaluate these actions from left to right, and collect the results, with access its position (and the arguments flipped).

forM a ≡ iforM a . const
iforM ≡ flip imapM


imapAccumR :: TraversableWithIndex i t => (i -> s -> a -> (s, b)) -> s -> t a -> (s, t b) #

Generalizes mapAccumR to add access to the index.

imapAccumROf accumulates state from right to left.

mapAccumR ≡ imapAccumR . const


imapAccumL :: TraversableWithIndex i t => (i -> s -> a -> (s, b)) -> s -> t a -> (s, t b) #

Generalizes mapAccumL to add access to the index.

imapAccumLOf accumulates state from left to right.

mapAccumLOf ≡ imapAccumL . const


# Indexed Folds with Reified Monoid

ifoldMapBy :: FoldableWithIndex i t => (r -> r -> r) -> r -> (i -> a -> r) -> t a -> r Source #

ifoldMapByOf :: IndexedFold i t a -> (r -> r -> r) -> r -> (i -> a -> r) -> t -> r Source #

# Indexed Traversals with Reified Applicative

itraverseBy :: TraversableWithIndex i t => (forall x. x -> f x) -> (forall x y. f (x -> y) -> f x -> f y) -> (i -> a -> f b) -> t a -> f (t b) Source #

itraverseByOf :: IndexedTraversal i s t a b -> (forall x. x -> f x) -> (forall x y. f (x -> y) -> f x -> f y) -> (i -> a -> f b) -> s -> f t Source #