content: {-# OPTIONS_HADDOCK not-home #-}
  
  -- | Internal implementation details of indexed traversals.
  --
  -- This module is intended for internal use only, and may change without warning
  -- in subsequent releases.
  module Optics.Internal.IxTraversal where
  
  import Data.Profunctor.Indexed
  
  import Optics.Internal.Fold
  import Optics.Internal.Indexed.Classes
  import Optics.Internal.IxFold
  import Optics.Internal.IxSetter
  import Optics.Internal.Optic
  import Optics.Internal.Setter
  
  -- | Internal implementation of 'Optics.IxTraversal.itraversed'.
  itraversed__
    :: (Traversing p, TraversableWithIndex i f)
    => Optic__ p j (i -> j) (f a) (f b) a b
  itraversed__ = conjoined__ (wander traverse) (iwander itraverse)
  {-# INLINE [0] itraversed__ #-}
  
  -- Because itraversed__ inlines late, GHC needs rewrite rules for all cases in
  -- order to generate optimal code for each of them. The ones that rewrite
  -- traversal into a traversal correspond to an early inline.
  
  {-# RULES
  
  "itraversed__ -> wander traverse"
    forall (o :: Star g j a b). itraversed__ o = wander traverse (reStar o)
      :: TraversableWithIndex i f => Star g (i -> j) (f a) (f b)
  
  "itraversed__ -> folded__"
    forall (o :: Forget r j a b). itraversed__ o = folded__ (reForget o)
      :: FoldableWithIndex i f => Forget r (i -> j) (f a) (f b)
  
  "itraversed__ -> mapped__"
    forall (o :: FunArrow j a b). itraversed__ o = mapped__ (reFunArrow o)
      :: FunctorWithIndex i f => FunArrow (i -> j) (f a) (f b)
  
  "itraversed__ -> itraverse"
    forall (o :: IxStar g j a b). itraversed__ o = iwander itraverse o
      :: TraversableWithIndex i f => IxStar g (i -> j) (f a) (f b)
  
  "itraversed__ -> ifolded__"
    forall (o :: IxForget r j a b). itraversed__ o = ifolded__ o
      :: FoldableWithIndex i f => IxForget r (i -> j) (f a) (f b)
  
  "itraversed__ -> imapped__"
    forall (o :: IxFunArrow j a b). itraversed__ o = imapped__ o
      :: FunctorWithIndex i f => IxFunArrow (i -> j) (f a) (f b)
  
  #-}
  