defmodule DeepCompare do def call(payload_a, payload_b) when is_map(payload_a) and is_map(payload_b) do Enum.reduce(payload_a, true, fn {k, v}, acc -> acc and call(v, payload_b[k]) end) end def call([element_a | rest_of_a], [element_b | rest_of_b]) do call(element_a, element_b) and call(rest_of_a, rest_of_b) end def call(payload_a, payload_b) do result = payload_a === payload_b unless result, do: IO.inspect({payload_a, payload_b}, label: "Difference") result end end