I have a small Rust library for session-typed channels, called sesh, and while using it, I noticed something really weird. Maybe you can help me figure out what's going on?

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!

I've attached a more complete example below. Is there anything I'm missing on why this happens?
gist.github.com/wenkokke/ad8a7

It seems that the only difference between Send and Recv is S versus S::Dual in the struct definition!

Sign in to participate in the conversation
Computer Fairies

Computer Fairies is a Mastodon instance that aims to be as queer, friendly and furry as possible. We welcome all kinds of computer fairies!