bind

Namespace: FsToolkit.ErrorHandling

bind takes a transformation function 'okInput -> Result<'okOutput, 'error> and a Result<'okInput, 'error>. If the Result is Ok x, it applies the transformation function to x, which returns a new Result<'okOutput, 'error>. The bind function then returns the new Result<'okOutput, 'error>. If the original Result is an Error, it simply returns the original Error unchanged without invoking the transformation function.

Function Signature

('okInput -> Result<'okOutput, 'error>) -> Result<'okInput, 'error> 
    -> Result<'okOutput, 'error>

Examples

Take the following function for example

// string -> Result<int, string>
let tryParseInt (s: string) =
    match Int32.TryParse(s) with
    | true, i -> Ok i
    | false, _ -> Error "Could not parse string as int"

Example 1

let result =
    Ok "123" // Result<string, string>
    |> ResultOption.bind tryParseInt // Result<int, string>

// Ok 123

Example 2

let result =
    Ok "bad things happened" // Result<string, string>
    |> ResultOption.bind tryParseInt // Result<int, string>

// Error "Could not parse string as int"

Example 3

let result =
    Error "bad things happened" // Result<string, string>
    |> ResultOption.bind tryParseInt // Result<int, string>

// Error "bad things happened"

Last updated