Although, there's a slight complication, what about something like
```rust
fn nested() -> Vec<impl Foo>
```

There is extra structure here, so presumably the `nested::impl` type would preferably point to the interior of the `Vec` rather than the whole return type (i.e. it's returning `Vec<nested::impl>`, meaning one might wish to write something like `let x: &nested::impl = nested().get(0)`), which then makes it hard to refer to values with multiple abstract generics, e.g.

```rust
fn tuple() -> (impl Iterator<int>, impl Iterator<u8>)
```

Also, what about abstract generics nested in others:

```rust
fn nested2() -> impl Iterator<impl Foo>
```