Records the history of currently open implicit searches
Check for possible divergence. If one is detected return the current search history
(this will be used as a criterion to abandon the implicit search in rankImplicits).
If no divergence is detected, produce a new search history nested in the current one
which records that we are now also looking for type
As long as
searchDepth is lower than the
in settings, a new history is always produced, so the implicit search is always
searchDepth matches or exceeds the
we test that the new search is for a class that is either not yet in the set of
seen classes, or the complexity of the type
proto being searched for is strictly
lower than the complexity of the type that was previously encountered and that had
the same class symbol as
proto. A possible divergence is detected if that test fails.