Data.Map.mapKeysMonotonic is a misleading name

David Feuer david.feuer at
Wed Apr 3 15:11:33 UTC 2019

We can't use "increasing" because mathematically that usually means
non-strictly increasing. Using "ascending" gets us in trouble with the
other functions in the module that use the word in a non-strict sense.

On Wed, Apr 3, 2019, 10:46 AM Elliot Cameron <eacameron at> wrote:

> Hello!
> In some recent analysis I ran into a subtlety that caught me by surprise:
> Data.Map.mapKeysMonotonic has a misleading name.
> A monotonic function is not a strictly *increasing* function, but merely
> non-decreasing. However, mapKeysMonotonic requires that it's mapping
> function be injective, which means it really only supports *increasing*
>  functions.
> valid (mapKeysMonotonic (\x -> if x `elem` [1,2] then 2 else x) (fromList [(1, "a"), (2, "b"), (3, "c")])) == False
> The docs hint at this with "This means that @f <>@
> maps distinct original keys to distinct resulting keys."
> However, I'd propose that we deprecate this name and rename to something
> like mapKeysIncreasingor mapKeysAsc (to follow the pattern of other *Asc
> functions). We should also clarify the docs.
> From
> _______________________________________________
> Libraries mailing list
> Libraries at
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list