I think you're stuck completely on the iterator example or only named functions (which makes sense, since that's all you've seen), rather than several languages supporting various types of polymorphic returns and/or downstream target typing (mainly in lambdas or with sigils).
Certainly if you allow a language do something like:
```rust
fn foo() -> i32 { 42 }
fn foo() -> String { "42" }
```
That would be a nightmare.
But you can have something like:
```rust-ish
@eager_fallback(String[])
fn split(s: String, separator: Char) -> String::Iterator { ... }
```
Which, essentially, defaults to calling collect to an Array for you when bound to a variable, or when chained to a function that doesn't take an iterator but does take a String Array. And in a different mode of compilation, there are no fallbacks (you're back to Rust).
Sure, I don't know a language that supports polymorphic return exactly on `.split()`, but there are languages that support all of the different mechanisms to do this intelligently.
You're assuming the implementation is going to do a number of things that would cause either code bloat or force ambiguity (and potentially a number of other assumptions).
I think you're also assuming the type is not resolved until who knows what happens to it, rather than once it's bound.
None of those HAVE to be true.
To the best of my knowledge, for the most common cases, this can be solved, and when it can't, the compiler can flag it.
None of the languages you mentioned support this 'eager_fallback' feature, no. I am not stuck on any one application of the feature (you'll notice I referred both to the individual application and the general feature, and then you ignored it), but rather you are overindexing on generic returns, which are insufficient for what you're describing in a load-bearing way. Rust supports what C# supports, on the subject of generics (in ways germane to this feature), and what Rust lacks, C# also lacks. So your reference to C# supporting this is false. The feature you are proposing exists in zero languages on the planet. The thing you can get, top-generic returns, exist in Rust and the languages you mentioned, and don't accomplish your named goal at all because you can't use them as a method receiver without disambiguating them.