Comment made by: gfredericks
I think there is a messy solution to this that is just barely okay.
To shrink to the children, you need to know what they are, including their shrink trees.
One way to do this would be for {{recursive-gen}} to wrap the generator it passes to the user function in some instrumentation that keeps track of what args the generator was called with (or what its return values were), and then prepends items to the final shrink tree that attempt to shrink directly to those values first.
A minor objection to this approach is that just because the generator passed in was called, does not mean that the values generated by those calls were actually used (e.g., they could have been filtered out by {{such-that}}).
However, I think this only amounts to possible confusion in the worst case, since anything generated by the generator passed to the user function is a valid thing for the whole structure to generate. So it shouldn't be invalid to shrink to, even if it is unrelated.