Erlang deep clone and recursive map merge
Erlang
-module(deep_merge).
-export([clone/1, merge/2]).
clone(Term) -> binary_to_term(term_to_binary(Term)).
merge(A, B) when is_map(A), is_map(B) ->
maps:fold(fun(K, VB, Acc) ->
case Acc of
#{K := VA} -> Acc#{K => merge(VA, VB)};
_ -> Acc#{K => clone(VB)}
end
end, clone(A), B);
merge(_A, B) ->
clone(B).