This works just fine...
type Foo = Recv<Bar, End>;
enum Bar {Baz(Recv<i64, Send<i64, Foo>>)}
This fails with "overflow evaluating the requirement"!
type Foo = Recv<Bar, End>;
enum Bar {Baz(Send<i64, Recv<i64, Foo>>)}
But the requirements on Send and Recv are identical!