This implementation loops over the `actual` list twice (once to index, once to see if the it matches all items) and the matcher is matched against every item twice.  There's no guarantee that `matcher.matches?` will be a fast operation, so it's best to avoid matching multiple times.  I think you can implement this in one pass over the list like so:

``` ruby
def match(_, actual)
  index_failed_objects
  failed_objects.empty?
end
```