Simple partial application

Some of these partial application syntax proposals are approaching https://www.boost.org/libs/lambda, which added lambdas to C++ as a library. For example, one could do _1 * 2 for what rust calls |x| x * 2. I suspect nightly Rust could do something similar today. (Nightly to be able to implement the Fn* traits.)

The biggest problem that has is figuring out the extent of the lambda:

  • How does one decide if foo().bar(_) is |x| foo().bar(x) or match foo() { t => |x| t.bar(x) }? (Not unlike the postfix macro discussions.)
  • If one has foo(_, _), is that |x, y| foo(x, y) or |x| |y| foo(x, y), or something else? Can one do the other?

So I’m not sure how much value there is there over |x|, which just isn’t that long.

(That said, currying can certainly be useful, so part of me likes the idea of being able to declare things as fn foo(x: i32)(y: i32) -> i32 so that foo(2): Fn(i32)->i32. But then it’d always be foo(1)(2), never foo(1, 2).)

6 Likes