Currently we can destruct-while-calling any argument except self. I.e.
struct Foo(i32, i32);
fn foo(Foo(a, b): Foo) {}
foo(Foo(1, 2))
impl Foo {
// fn foo(Foo(a, b)) {} won't work (at least if it is trait implementation
// fn foo(Foo(a, b): self) won't work either (1)
// fn foo(Foo(a, b): Self) either (2)
}
Is there any way to achieve this without additional let Foo(a, b) = self line? If no maybe it is worth to consider allowing syntax (1) or (2)?