     end
   end
 
-  def diff(map1, map2) when is_map(map1) and is_map(map2) do
+  defp do_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

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

      case Dict.has_key?(map1, k) do
        true ->
          case Dict.has_key?(map2, k) do
            true -> {k, do_diff(Dict.get(map1, k), Dict.get(map2, k))}
            false -> {k, [Dict.get(map1, k), 0, 0]}
          end
        false -> {k, [Dict.get(map2, k)]}
