```rust=
async fn foo(PAT: [u8; 10]) {
/* ... */
}
```
==>
```rust=
fn foo(x: [u8; 10]) -> impl Future<...> {
// ~~~~~~~~~~~ don't focus on the parameters
// ... because
//
async {
let PAT = x;
/* ... */
}
// the real problem is coming out of the generator
// structure here, namely the free variable `x`
// is represented as a structural "upvar"
// upvar: `x`
// and it being moved/copied into the local(s): PAT
}
```
==>
```rust=
fn foo(x: [u8; 10]) -> impl Future<...> {
async {}
}
```
for closures:
```rust=
fn foo(y: 3) {
let f = |z| { ... y ... z ...}
// ~~~~~~~~~~~~~~~~~~~~~~
// evaluation of this lambda
// is what 1. creates/allocates the "environment"
// structure and 2. initializes its values/field
...
f(10);
}
```