Combine F # async e talvez expressão de computação

Digamos que eu queira devolver umOption enquanto em umasync fluxo de trabalho:

let run = 
    async {
        let! x = doAsyncThing
        let! y = doNextAsyncThing x
        match y with
        | None -> return None
        | Some z -> return Some <| f z
    }

Idealmente, eu usaria a expressão talvez de cálculo do FSharpx ao mesmo tempo que async para evitar fazer omatch. Eu poderia fazer um construtor personalizado, mas existe uma maneira de combinar genericamente duas expressões de computação? Pode parecer algo assim:

let run = 
    async {
        let! x = doAsyncThing
        let! y = doNextAsyncThing x
        return! f y
    }

questionAnswers(3)

yourAnswerToTheQuestion