Top-level self functions `fn f(self: T)`

Coincidentally, both this and the sister thread Testing the waters: UMCS (Unified Method Call Syntax) attempt to solve essentially the same problem, and both were originally (as far as I know) suggested in CAD97's Weird syntax idea(s) for UMCS.

Since both approaches have their disadvantages — e.g., the x.(func)(params) syntax seems hard to swallow for some — to float another alternative: just adding multi-argument pipe (and tap?) to std. This has several major disadvantages, one of which being that you lose two-phase borrowing, the upside being that no new syntax is needed. As a prior: the single-argument tap crate is one of the most popular crates in terms of both all-time and recent downloads.

Why not have multi-argument pipe as a crate? You can — see pipei — but it requires nightly (impl_trait_in_assoc_type).