What does this higher-rank trait bound mean?

Thank you for the clarification! From an ergonomics standpoint, is there any way to make the compiler infer the lifetime without making it a generic parameter to the trait like this? When writing generic functions it would be nice to be able to write T: Swappable instead of T: Swappable<'a>.

pub trait Swappable<'a>
{
    type Output<B: 'a>;
}
impl <'a, A: 'a> Swappable<'a> for Foo<A> {
    type Output<B: 'a> = Foo<B>;
}
impl <'a, A: 'a> Swappable<'a> for Bar<'a, A> {
    type Output<B: 'a> = Bar<'a, B>;
}