```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); } ```