O(log n). Insert with a function, combining key, new value and
old value.
insertWithKey f key value mp will insert
the pair (key, value) into
mp if key does not exist in the
map. If the key does exist, the function will insert the pair
(key,f key new_value old_value). Note that the key passed to
f is the same key passed to
insertWithKey.
let f key new_value old_value = (show key) ++ ":" ++ new_value ++ "|" ++ old_value
insertWithKey f 5 "xxx" (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "5:xxx|a")]
insertWithKey f 7 "xxx" (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a"), (7, "xxx")]
insertWithKey f 5 "xxx" empty == singleton 5 "xxx"