Skip to content

Instantly share code, notes, and snippets.

@coproduto
Created August 3, 2023 17:14
Show Gist options
  • Save coproduto/ca664848bd331f9899b17ca9e830b448 to your computer and use it in GitHub Desktop.
Save coproduto/ca664848bd331f9899b17ca9e830b448 to your computer and use it in GitHub Desktop.
defmodule DeepMerge do
def deep_merge(m1, m2) do
Map.new(m1, fn {k, v1} ->
case Map.get(m2, k) do
nil -> {k, v1}
v2 -> {k, deep_merge_values(v1, v2)}
end
end)
end
defp deep_merge_values(v1, v2) when is_map(v1) and is_map(v2), do: deep_merge(v1, v2)
defp deep_merge_values(v1, v2) when is_list(v1) and is_list(v2), do: v1 ++ v2
defp deep_merge_values(_v1, v2), do: v2
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment