Python\'s enumerate on lists can be written as zip [0..]. I looked at Control.Lens.Traversal and Control.Lens.Indexed, but I couldn\'t figure out how to use len
zip [0..]
You're ignoring the Applicative context on itraverse. You need something for it to be working with. But the something can be boring, like Identity.
Applicative
itraverse
Identity
imap f = runIdentity . itraverse (\i a -> return (f i a))
And then you get what you're looking for:
> imap (,) [1,2,3] [(0,1),(1,2),(2,3)]