trait MyFn { type Output; fn call(&self, arg: Arg) -> Self::Output; } struct Wrap(F); impl MyFn for Wrap where F: Fn(A) -> B { type Output = B; fn call(&self, arg: A) -> Self::Output { (self.0)(arg) } } struct A; fn test() -> impl for<'a> MyFn<&'a A, Output=impl Iterator + 'a> { //~^ ERROR higher kinded lifetime bounds on nested opaque types are not supported yet Wrap(|a| Some(a).into_iter()) } fn main() {}