    {-# OPTIONS_HADDOCK not-home #-}

    -- | Internal implementation details of indexed setters.
    --
    -- This module is intended for internal use only, and may change without warning
    -- in subsequent releases.
    module Optics.Internal.IxSetter where

    import Data.Profunctor.Indexed

    import Optics.Internal.Indexed.Classes
    import Optics.Internal.Optic

    -- | Internal implementation of 'Optics.IxSetter.imapped'.
    imapped__
      :: (Mapping p, FunctorWithIndex i f)
      => Optic__ p j (i -> j) (f a) (f b) a b
    imapped__ :: forall (p :: * -> * -> * -> *) i (f :: * -> *) j a b.
    (Mapping p, FunctorWithIndex i f) =>
    Optic__ p j (i -> j) (f a) (f b) a b
    imapped__ = (p j a b -> p j (f a) (f b))
    -> (p j a b -> p (i -> j) (f a) (f b))
    -> p j a b
    -> p (i -> j) (f a) (f b)
    forall i a b s t j.
    (p i a b -> p i s t) -> (p i a b -> p j s t) -> p i a b -> p j s t
    forall (p :: * -> * -> * -> *) i a b s t j.
    Profunctor p =>
    (p i a b -> p i s t) -> (p i a b -> p j s t) -> p i a b -> p j s t
    conjoined__ (((a -> b) -> f a -> f b) -> p j a b -> p j (f a) (f b)
    forall a b s t i. ((a -> b) -> s -> t) -> p i a b -> p i s t
    forall (p :: * -> * -> * -> *) a b s t i.
    Mapping p =>
    ((a -> b) -> s -> t) -> p i a b -> p i s t
    roam (a -> b) -> f a -> f b
    forall a b. (a -> b) -> f a -> f b
    forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
    fmap) (((i -> a -> b) -> f a -> f b) -> p j a b -> p (i -> j) (f a) (f b)
    forall i a b s t j.
    ((i -> a -> b) -> s -> t) -> p j a b -> p (i -> j) s t
    forall (p :: * -> * -> * -> *) i a b s t j.
    Mapping p =>
    ((i -> a -> b) -> s -> t) -> p j a b -> p (i -> j) s t
    iroam (i -> a -> b) -> f a -> f b
    forall a b. (i -> a -> b) -> f a -> f b
    forall i (f :: * -> *) a b.
    FunctorWithIndex i f =>
    (i -> a -> b) -> f a -> f b
    imap)
    {-# INLINE imapped__ #-}