Maybe you just miscommunicated, but you absolutely can use generic parameters in a return type:
https://doc.rust-lang.org/nightly/std/iter/trait.Iterator.ht...
... and `impl Trait` exists to be able to have return types which are difficult, verbose, or impossible to name.