Idea: Paths in method names

Just to be clear, that means this syntax would only be available in the next edition, as bare trait objects still work in the current 2018 edition.

That said, for the case of resolution between conflicting traits, I do like the (value as Trait).method() more than full UMCS value.Trait::method().

I still think full UMCS is valuable as a pipe operation (i.e. foo |> crate::fun would be written foo . crate::fun; I think the extra space for UMCS helps give it room to breathe and makes the pipeline behavior clearer and slightly less foreign). I guess in a chain it really comes down to whether putting the extra parentheses around the first part of the chain is too disruptive or not.

Example:

give()
    .me()
    .a()
    .foo()
    . Trait::method();
// vs
(give()
    .me()
    .a()
    .foo() as Trait)
    .method();
// vs with type ascription with favorable binding behavior
give()
    .me()
    .a()
    .foo(): Trait
    .method();
// vs just making a new variable
let foo = give()
    .me()
    .a()
    .foo();
(foo as Trait).method();