error[E0308]: mismatched types
  --> $DIR/issue-20862.rs:2:5
   |
LL | fn foo(x: i32) {
   |                - help: a return type might be missing here: `-> _`
LL |     |y| x + y
   |     ^^^^^^^^^ expected `()`, found closure
   |
   = note: expected unit type `()`
                found closure `[closure@$DIR/issue-20862.rs:2:5: 2:8]`

error[E0618]: expected function, found `()`
  --> $DIR/issue-20862.rs:7:13
   |
LL | fn foo(x: i32) {
   | -------------- `foo` defined here returns `()`
...
LL |     let x = foo(5)(2);
   |             ^^^^^^---
   |             |
   |             call expression requires function

error: aborting due to 2 previous errors

Some errors have detailed explanations: E0308, E0618.
For more information about an error, try `rustc --explain E0308`.