This proposal addresses a problem that I have faced all the time. I used to use Golang before Rust, Golang uses `context` package for this, and I have created `In` objects to emulate context. Consider this code[1], I pass it all over the place. I never liked it, it made function signatures complex, and did not always solve it, I had to keep track of more than one "context" types as different parts of code need different capabilities.<p>So I am glad people are working on it. I also find the solution quite ingenious.<p>The main concern that came to my mind was aliasing. This is like "spooky argument at a distance" kind of thing happening, and how do I "rename" these arguments in transit?<p>Say I am going to call two methods, both of them require different context data but with same "thing", eg say I want to implement a custom deserialiser that deserialises into same type, `Vec<String>`, but instead of allocating new ones I want to deserialise them into two different pre allocated buffers which I want to pass as context. But each call must get a different buffer.<p>Of course things would be easy if they were clear different `with` clauses, but if they overlap then I am not sure.<p>[1]: <a href="https://github.com/FifthTry/realm/blob/master/src/urls.rs#L15-L22" rel="nofollow">https://github.com/FifthTry/realm/blob/master/src/urls.rs#L1...</a>