# An Alternative Syntax for Async Functions

**URL:** <https://internals.rust-lang.org/t/an-alternative-syntax-for-async-functions/15255>\
**Category:** Uncategorized\
**Created:** [September 1, 2021, 5:51pm UTC](https://internals.rust-lang.org/t/an-alternative-syntax-for-async-functions/15255 "2021-09-01T17:51:55Z")\
**Posts on this page:** 1\
**Showing post:** 22

<div class="post-metadata">

**Author:** ![ohAitch](https://sea2.discourse-cdn.com/flex002/user_avatar/internals.rust-lang.org/ohaitch/32/5779_2.png) [@ohAitch](https://internals.rust-lang.org/u/ohAitch)\
**Post date:** [September 7, 2021, 9:02pm UTC](https://internals.rust-lang.org/t/an-alternative-syntax-for-async-functions/15255/22 "2021-09-07T21:02:52Z")

</div>

`async` modifying the return type is definitely one of the weirdest parts of the language to me - not to say that the proposed

```rust
async fn foo() -> impl Future<Output = usize> { 1 }

```

is reasonable either.

Spitballing some intermediate points:

1. `fn foo() -> async(usize) { 1 }`
2. `async fn foo() -> impl Future<usize> { 1 }`
3. `fn foo() -> impl Future<usize> => async { 1 }`
4. `async fn foo() -> k#future usize { 1 }`
5. `fn foo() -> k#future usize => async { 1 }`
6. `fn foo() -> k#fut usize => async { 1 }`
7. `async fn foo() -> k#fut usize { 1 }`
8. `fn foo() => async { 1 }: usize`

---

_[View the full topic](https://internals.rust-lang.org/t/an-alternative-syntax-for-async-functions/15255)._
