I've opened https://github.com/rust-lang/rust/pull/91286 with a way to solve this kind of problem.    With that, instead of `-> Option<R>` you'd have `-> ChangeOutputType<R, Option<R::Output>>`.  That would mean that if the closure returns `Result<T, E>` you'll get `Result<Option<T>, E>` -- and in a way that `try_reduce(...)?` would infer correctly.