<p dir="ltr"><br>
On Jul 8, 2016 7:18 PM, "Ivan Lazar Miljenovic" <<a href="mailto:ivan.miljenovic@gmail.com">ivan.miljenovic@gmail.com</a>> wrote:<br>
><br>
> On 9 July 2016 at 03:49, David Feuer <<a href="mailto:david.feuer@gmail.com">david.feuer@gmail.com</a>> wrote:</p>
<p dir="ltr">> > Data.Set: mapStrictlyIncreasing and mapStrictlyDecreasing<br>
> > Data.Map: mapKeysStrictlyIncreasing and mapKeysStrictlyDecreasing<br>
><br>
> With the latter function also flipping the underlying tree structure?</p>
<p dir="ltr">I'm not quite sure what you mean, but I think the answer is yes.</p>
<p dir="ltr">mapKeysStrictlyDecreasing (\x -> -x) (fromList [1..10]) === fromList [(-10) .. (-1)]</p>
<p dir="ltr">><br>
> > Data.Map presents another possibility, however. We could make the<br>
> > replacements more general, giving them types<br>
> ><br>
> > Ord k => (k -> v -> (k', v')) -> Map k v -> Map k' v'<br>
> ><br>
> > and allowing the user to map over both keys and values in one pass.<br>
><br>
> Though IIUC this provides no way of specifying that "I'm sure this<br>
> function has a 1-1 monotonic relationship so you can just update the<br>
> keys without changing the structure" (in the sense of there's no way<br>
> to distinguish between the increasing and decreasing sense).</p>
<p dir="ltr">That is the pre-condition. There still needs to be one for strictly increasing functions and another for strictly decreasing ones, since they lead to reversed tree structures.</p>
<p dir="ltr">><br>
> Overall, I'm about +0.5 from the naming sense of the current<br>
> functions, but have used these in the past.</p>
<p dir="ltr">I don't understand this statement.</p>