Regardless, I would point out that one serious advantage to _not_ giving the return type explicitly or making it part of the public API is that it makes it much easier to change it when we need to. If `only` returns `Only`, and that's part of the public API, then we can't change it later even if we come up a better return type.

For instance, `take` and `takeExactly` now return the same type for infinite ranges. They didn't used to. We couldn't have made that change if `takeExactly` explicitly returned `TakeExactly`. And you really shouldn't need to know or care what the return types of the various range-based functions are. You need to know their API, but that's defined by the fact that they're ranges. The name itself is completely unnecessary and just restricts our ability to refactor code and make improvements. `typeof(func(range))` might be a bit annoying in its verbosity, but it's well worth the flexibility that it gains us IMHO, especially since in most cases, you don't keep the result of range-based functions like that.