Даже если глубокий обход поддерживался ядром elixir , у вас есть кортежи, поскольку значения и кортежи не повторяются.
Единственный способ - написать рекурсивное решение на основе шаблона -matching.
defmodule Sanitizer do
def yo(%{} = map) do
map
|> Enum.map(fn
{<<"c:", rest::binary>>, v} -> {rest, yo(v)}
{k, v} -> {k, yo(v)}
end)
|> Map.new()
end
def yo({<<"c:", rest::binary>>, v}), do: {rest, yo(v)}
def yo({k, v}), do: {k, yo(v)}
def yo(any), do: any
end
Sanitizer.yo(map)
#⇒ sanitized result
FWIW, есть библиотека Iteraptor
, написанная мной в те времена, когда я думал, что наличие leftpad -подобных библиотек для всего достаточно хорошо. Он мог бы иметь дело с вводом, если бы у него не было кортежей (которые просто невозможно обойти никакими средствами.)