trait FooTrait: Sized { type Bar: BarTrait; } trait BarTrait: Sized { type Baz; fn foo(); } type Foo = <>::Bar as BarTrait>::Baz; type Bar = >::Baz; fn some_func, U>() { <>::Bar as BarTrait>::foo(); } fn some_func>() { >::foo(); }