     |> Enum.into(%{})
   end
 
-  def diff(i1, i2) when not (is_list(i1) and is_list(i2))
+  defp do_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

  def diff(map1, map2) when is_map(map1) and is_map(map2) do
    keys_non_uniq = Map.keys(map1) ++ Map.keys(map2)
    keys_non_uniq
    |> Stream.uniq

    {to_string(i), [v]}
  end

  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]))
