So, I don't think completely eliding the type prefix is a good idea since there could be name conflicts etc. However, Rust traditionally use _ to mean a derivable type. So why not just write
match future.pull(ctx) {
_::Pending => ...
_::Ready(v) => ...
}
To the language user the above can be understood as:
The result to match is an enum and it has certain variants. I want to match them accordingly. Compiler please find the enum type for me, let me know if I am wrong or missed something.
When I brought this up before, people seemed comfortable with using _::Variant in pattern matching, just not construction. It's not at the top of my list (there are much larger things first), but I hope to write an RFC to this effect.
Basically at the match site, I can opt-in to having each element of the match statement only be an enum member. This avoids the namespace-pollution of use Poll::*; style approaches.
(Bikeshed syntax here, maybe match Poll @ future.pull(ctx) or match future.pull(ctx)::Poll or something else; I am not an expert on the grammar and what would work best here; the point is that there's a small extension to match)