[containers] Proposal: Add traverseKeys, traverseKeysWith, traverseKeysMonotonic to Data.Map

Niklas Haas haskell at nand.wakku.to
Tue Mar 11 01:24:21 UTC 2014

Hello all,

While programming a specific type of map update I came across a great
need for a 'traverseKeys' function. I ended up making it myself but it
was still less efficient than it needed to be because my traversal
function was actually monotonic.

I went ahead and added this along with some variants to Data.Map.

> traverseKeys :: (Applicative f, Ord k2) => (k1 -> f k2) -> Map k1 a -> f (Map k2 a)
> traverseKeysWith :: (Applicative f, Ord k2) => (a -> a -> a) -> (k1 -> f k2) -> Map k1 a -> f (Map k2 a)
> traverseKeysMonotonic :: (Applicative f, Ord k2) => (k1 -> f k2) -> Map k1 a -> f (Map k2 a)

A full patch can be found here:

Let me know what you think,

Discussion period: 2 weeks

More information about the Libraries mailing list