I'm saying that I wish computation blocks looked better in F#. Instead of:
let foo id = async {
let! bar = getBar id
return bar
}
I would prefer
let async foo id =
let! bar = getBar id
bar
or even something like
let async foo id =
getBar! id
So that computation blocks don't feel like you're switching to an entirely different language. Just wrap the ugliness in the same syntactic sugar that C# does. As it is, C# can achieve arrow syntax with async methods more elegantly than F# can:
async Task<string> foo(int id) => await getBar(id);
This, to me, is also part of a larger problem of F# introducing unique keywords for specific language functions instead of reusing keywords, like
member this.Foo = ...
and
member val Foo = ...