extend ComputationExpression builders with Map : m<'a> * ('a -> 'b) -> m<'b>
In many scenarios computation expressions could be executed way more efficiently when having just a little more information.
The typical use-case for that would be something like
let! a = something
which currently gets translated to:
async.Bind(something, fun a -> async.Return(2*a))
By monad laws (borrowed from haskell here) this must be equal to:
async.Map(something, fun a -> 2*a)
In many scenarios the latter can be implemented with a lot less overhead, so in my opinion it would be profitable to allow users to provide this "shortcut".