   defdelegate merge(map1, map2), to: :maps
 
   @doc """
-  Merges two maps into one.
-
-  All keys in `map2` will be added to `map1`. The given function will
-  be invoked with the key, value1 and value2 to solve conflicts.
+  Merges two maps into one, resolving conflicts through the given `callback`.
+
+  All keys in `map2` will be added to `map1`. The given function will be invoked
+  when there are duplicate keys; its arguments are `key` (the duplicate key),
+  `value1` (the value of `key` in `map1`), and `value2` (the value of `key` in
+  `map2`). The value returned by `callback` is used as the value under `key` in
+  the resulting map.
 
   ## Examples
 


  defp drop_list([], acc), do: acc
  defp drop_list([key | rest], acc) do
    drop_list(rest, Map.delete(acc, key))
  end

  @doc """
  Takes all entries corresponding to the given `keys` and extracts them into a
  separate `map`.

  Returns a tuple with the new map and the old map with removed keys.


  @doc """
  Updates the `key` in `map` with the given function.

  If `key` is present in `map` with value `value`, `fun` is invoked with
  argument `value` and its result is used as the new value of `key`. If `key` is
  not present in `map`, `initial` is inserted as the value of `key`.

  ## Examples

