Metaprogramming like frunk does is sort of a special case; most code won't use extra type inference variables the way that frunk does. But also, at least in theory, the example signature there could also be written as
fn print_height<'a, A>(obj: &'a A) -> String
where
&'a A: PathTraverser<Path!(dimensions.height), impl Sized, TargetValue = &'a usize>
+ PathTraverser<Path!(dimensions.unit), impl Sized, TargetValue = &'a SizeUnit>,
except that impl Trait isn't permitted in this position because it's very unclear whether this is a "universal" type variable (chosen by the caller, implementation must work for any possible choice) or an "existential" type variable (chosen by the implementation, caller must work for any[1] possible choice).
The more specific case of your example
fn foo(foo: impl Foo<impl Sized>)
which is "nested impl Trait" rather than "impl Trait in bounds" might be made permissable in the future, since it's less unclear which direction the impl will make opaque, but that's still a good ways off. IIRC, a main question is handling impl Fn() -> impl Trait, as it isn't clear how return position inside argument position impl trait ("RPIAPIT"
) should behave[1:1], and to the type system that's just an associated type equality bound (i.e. impl Fn<(), Output=impl Trait>).
There's also a different thread currently open about using _ as a kind of minimally bound type hole in a signature, which could be somewhat related to the desire here.