Recursively enumerates type constructor declarations, halting when datatypes appear to already have an instance for the typeclass specified by the first Name parameter. It guesses that an instance exists for a given datatype if it's used in the top constructor of any of its parameters (see instanceMatches).
This function is useful for bulk defining typeclass instances like
Binary, Lift, Data, Typeable, etc. It isn't very clever,
though - in particular it has the following limitations:
It only works well when type constructors mentioned in fields should all have instances defined for them.
It ignores data type / constructor constraints.
It ignores data / type families.
It also takes a user-defined predicate, which is useful in situations where this attempts to descend into datatypes which do not need instances defined for them.
Note that this will always initially yield the Names of the initial types, regardless of whether they are instances or not.