Namespace: FsToolkit.ErrorHandling
Applies one of two mapping functions to an Async<Result<'okInput, 'errorInput>>: the first function is applied if the result is Ok, and the second is applied if the result is Error.
('okInput -> 'okOutput)
-> ('errorInput -> 'errorOutput)
-> Async<Result<'okInput, 'errorInput>>
-> Async<Result<'okOutput, 'errorOutput>>Transforming both the Ok and Error branches of an async result:
let result : Async<Result<string, int>> =
AsyncResult.ok 42
|> AsyncResult.eitherMap
(fun n -> sprintf "Got %d" n)
(fun err -> -1)
// evaluates to Ok "Got 42"Mapping an Error value while the Ok path is unchanged in type:
let result : Async<Result<string, string>> =
AsyncResult.error 404
|> AsyncResult.eitherMap
(fun s -> s.ToUpper())
(fun code -> sprintf "Error code: %d" code)
// evaluates to Error "Error code: 404"Normalising both branches to the same type before consuming:
let displayMessage : Async<string> =
fetchData ()
|> AsyncResult.eitherMap
(fun data -> sprintf "Success: %s" data)
(fun err -> sprintf "Failed: %s" err)
|> AsyncResult.foldResult id id