 
     diff = case Enum.split_with(new_list, &split_underscore_map/1) do
       {[], []} -> new_list
-      {_, []} -> new_list
-      {check, deleted} ->
+      {[], _} -> new_list
+      {deleted, check} ->
         deleted_map = Enum.into(deleted, %{})
         all_checked(check, deleted_map, opts)
         |> Enum.filter(fn

  @sentinel :json_diff_ex_sentinal_value

  @spec split_underscore_map({binary, list}) :: boolean
  defp split_underscore_map({<<"_", _::binary>>, [value, 0, 0]}) when is_map(value) do
    false
  end
  defp split_underscore_map(_) do
    true
  end

  @spec split_underscore({binary, list}) :: boolean
  defp split_underscore({<<"_", _::binary>>, [_, 0, 0]}) do
    false
  end

  defp split_underscore(_) do
    true
  end



              |> do_patch_list()
            false -> do_patch(v_map, v_diff)
          end
        [_, 0, 0] -> @sentinel
      end
    end)
    |> Enum.filter(fn({_k, v}) -> v !== @sentinel end)
    |> Enum.into(%{})
  end

  defp correct_lists(map, [diff_key, diff_new]) when is_list(map) and is_list(diff_key) do
    {Enum.join(map, "---"), [Enum.join(diff_key, "---"), diff_new]}
  end
  defp correct_lists(map, diff) do
    {map, diff}
  end

  @doc """
