# 2022-09-23 deep dive
## RPIT refactor
given this...
```rust
fn bar<'a>(&'a self) -> impl Debug + 'a
```
we desugar this to
```rust
fn foo<'a>(&'a self) -> Foo<'static, 'a> {
type Foo<..., 'a1>: Debug + 'a1;
```
because it inherits the parameters, we have to add `'static` values
Q: I guess one of the questions could have been ... why this is not just `Foo<'a1>` and you forget about what is not being captured?
A: the short version: that's what we were trying to do :)
Example:
```rust
fn foo<'a, T>(a: T) -> impl Debug
where
T: SomeTrait<'a> + Debug
{
a
}
```
`'a` not captured, but appears in where clauses; `T` captured