I just realized there *is* a way to implement traverseWithIndex reasonably efficiently with the current interface: traverseWithIndex f = sequenceA . mapWithIndex f I still think it's a good thing to add though. On Jan 19, 2016 12:24 PM, "Milan Straka" <milan@strakovi.com> wrote:
Hi David and all,
-----Original message----- From: David Feuer <david.feuer@gmail.com> Sent: 19 Jan 2016, 11:55
Indexed traversals seem to be pretty popular these days, and sequences should be able to support them efficiently. At present, the best options are
1. Thread a counter through. This doesn't work well for weird things like lazy State.
2. Use zipWith first to add indices, then traverse. This adds a smaller, but still asymptotic, penalty to the same sorts of unusual functors, and also adds constant-factor overhead to strict ones that the counter threading wouldn't.
I propose the following, modified mechanically from mapWithIndex. It should be about as efficient as possible in all cases.
+1 from me.
BTW, we have traverseWithKey in Map and IntMap, and traverseWithIndex seems a bit analogous for (indexable) Sequences, where an index can play a role of a key.
Cheers, Milan