Data.Map.mapKeysMonotonic is a misleading name

Elliot Cameron eacameron at gmail.com
Wed Apr 3 15:13:47 UTC 2019


Yeah the clearest names seem to be really long ones:
mapKeysMonotonicDistinct, mapKeysInjectiveIncreasing, mapKeysReferToDocs,
etc.

On Wed, Apr 3, 2019 at 11:11 AM David Feuer <david.feuer at gmail.com> wrote:

> 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 gmail.com> 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 <https://github.com/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 https://github.com/haskell/containers/issues/617
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20190403/9e74cd3f/attachment.html>


More information about the Libraries mailing list