     {to_string(i), [v]}
   end
 
-  def diff(l1, l2) when is_list(l1) and is_list(l2) do
+  defp do_diff(l1, l2) when is_list(l1) and is_list(l2) do
     l1_in_l2 = l1
                 |> Stream.map(
                     &([Enum.find_index(l2, fn(x) -> x === &1 end), &1]))

    |> Enum.into(%{})
  end

  def diff(i1, i2) when not (is_list(i1) and is_list(i2))
                    and not (is_map(i1) and is_map(i2)) do
    case i1 === i2 do
      true -> nil

    end
  end

  defp map_find_match(_, _, []) do
    []
  end

  defp map_find_match(i, value, [head | tail]) do
    {i2, value2} = case head do
      {<<"_", x>>, [value2, 0, 0]} -> {<<x>>, value2}
      _ -> {"", ""}
