> For the complete documentation index, see [llms.txt](https://demystifyfp.gitbook.io/fstoolkit-errorhandling/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://demystifyfp.gitbook.io/fstoolkit-errorhandling/fstoolkit.errorhandling/result/bind.md).

# 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

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

## Examples

Take the following function for example

```fsharp
// 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

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

// Ok 123
```

### Example 2

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

// Error "Could not parse string as int"
```

### Example 3

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

// Error "bad things happened"
```
