defmodule Main do def traverse(name \\ "", struct) def traverse(root, map) when is_map(map), do: Enum.each(map, fn {key, value} -> traverse("#{root}.#{key}", value) end) def traverse(key, value), do: IO.puts "#{key} --> #{value}" def main do traverse(%{a: 1, b: %{c: 2, d: %{e: 3, f: 4}}}) end end Main.main