Yeah, I did think about it but then a) we would have different behaviour between lazy SearchFailures b) we still do have to provide more specialized parameter type (see a couple of lines below) anyway for better error messages and unfortunately one cannot do it earlier c) here we handle the "no found implicit" and "diverging expansion..." but there are situations where we don't do it and simply rely on the fact that buffering the errors will do the right job.
I can definitely agree that the situation is not ideal but then choosing between any of the two methods only is also inconvenient.  Let me see if I can simplify it. I am not sure I get your `collect` proposition, could you elaborate?