I think that having a function being both suspend and accepting a CoroutineScope as a parameter (eg extends CoroutineScope), is confusing.
This means the function can suspend a while, but in which scope? The calling scope or the provided CoroutineScope?
For cancellation, will a suspended call to the function be cancelled when the calling or when the provided CoroutineScope is cancelled?
When the suspend function is still busy, will the calling scope or the provided scope wait until it has finished and marked as finished/done?
As you can see, it can create confusion and may break Structured Concurrency.