Map.new(Map.keys(a) ++ Map.keys(b), fn key ->
case {Map.fetch(a, key), Map.fetch(b, key)} do
{:error, {:ok, val}} -> {key, f(val)}
{{:ok, val}, :error} -> {key, f(val)}
{{:ok, val_a}, {:ok, val_b}} -> {key, f(val_a, val_b)}
# {:error, :error} not possible
end
end)






















