Traversable package:optics-core

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)