Insert with a combining function. insertWith 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 f new_value old_value.

Insert with a combining function. 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 f key new_value old_value.

Difference with a combining function. When two equal keys are
encountered, the combining function is applied to the key and both values.
If it returns Nothing, the element is discarded (proper set difference).
If it returns (Just y), the element is updated with a new value y.

Is this a proper submap? (ie. a submap but not equal). The expression
(isProperSubmapOfBy f m1 m2) returns True when m1 and m2 are not
equal, all keys in m1 are in m2, and when f returns True when
applied to their respective values.