async
modifying the return type is definitely one of the weirdest parts of the language to me - not to say that the proposed
async fn foo() -> impl Future<Output = usize> { 1 }
is reasonable either.
Spitballing some intermediate points:
fn foo() -> async(usize) { 1 }
async fn foo() -> impl Future<usize> { 1 }
fn foo() -> impl Future<usize> => async { 1 }
async fn foo() -> k#future usize { 1 }
fn foo() -> k#future usize => async { 1 }
fn foo() -> k#fut usize => async { 1 }
async fn foo() -> k#fut usize { 1 }
fn foo() => async { 1 }: usize