Namespace: FsToolkit.ErrorHandling
('TInput -> Async<'TOutput option>) -> Async<'TInput option> -> Async<'TOutput option>
Take the following function for example
type Account =
{ EmailAddress : string
Name : string }
// string -> Async<Account option>
let lookupAccountByEmail email = async {
let john = { EmailAddress = "[email protected]"; Name = "John Johnson" }
let jeff = { EmailAddress = "[email protected]"; Name = "Jeff Jefferson" }
let jack = { EmailAddress = "[email protected]"; Name = "Jack Jackson" }
// Just a map lookup, but imagine we look up an account in our database
let accounts = Map.ofList [
("[email protected]", john)
("[email protected]", jeff)
("[email protected]", jack)
]
return Map.tryFind email accounts
}
let asyncOpt : Async<Account option> =
AsyncOption.some "[email protected]" // Async<string option>
|> AsyncOption.bind lookupAccountByEmail // Async<Account option>
// async { Some { EmailAddress = "[email protected]"; Name = "John Johnson" } }
let asyncOpt : Async<Account option> =
AsyncOption.some "[email protected]" // Async<string option>
|> AsyncOption.bind lookupAccountByEmail // Async<Account option>
// async { None }
let asyncOpt : Async<Account option> =
Async.singleton None // Async<string option>
|> AsyncOption.bind lookupAccountByEmail // Async<Account option>
// async { None }