Rust has the machinery to deal with this -- you'd need type annotations -- it just gets annoying.
Specific functions in Rust do get "overloaded" by return type by returning a generic parameter (e.g. the collect() method on iterators), but in general functions are expected to work without needing type annotations on return.
I mean, allowing this kind of use of FnOnce isn't a bad idea. I don't see major issues with it, just minor ones. That's not the choice that was made during the design. I'm sure if we looked at the original design rfcs this point will have come up somewhere :)
I wasn't involved in that decision, so I'm not aware of the exact reasoning.
After all overloading the return type is quite usual and extremly helpful for parsing or the conversion of types.
But these kind of operations most likely will be done with a Trait in Rust, so having this option for closures might not be that important.
Can you please explain why FnOnce shouldn't work this way?