# check

Namespace: `FsToolkit.ErrorHandling`

The intent of check is to allow an Ok result value to be validated.

`check` takes a validation function of the form `'ok -> Result<unit, 'error>` and a result of the form `Result<'ok, 'error>`.

If the result is `Ok x` then the validation function is applied, and if the validation function returns an error, this new error is returned. Otherwise, the original `Ok x` result is returned. If the original result is an Error, the original result is returned.

## Function Signature

```fsharp
('ok -> Result<unit,'error>) -> Result<'ok,'error> -> Result<'ok,'error>
```

## Examples

### Example 1

```fsharp
Ok (
    {|
        AccessPolicyName = "UserCanAccessResource"
        IsEnabled = true
    |}

)
|> Result.check (fun policy ->
    if not policy.IsEnabled then
        Error (
            $"The policy {policy.AccessPolicyName} cannot be used because its disabled."
        )
    else
        Ok ()
)

// Ok {| AccessPolicyName = "UserCanAccessResource"; IsEnabled = true; |}
```

### Example 2

```fsharp
Ok (
    {|
        AccessPolicyName = "UserCanAccessResource"
        IsEnabled = false
    |}

)
|> Result.check (fun policy ->
    if not policy.IsEnabled then
        Error (
            $"The policy {policy.AccessPolicyName} cannot be used because its disabled."
        )
    else
        Ok ()
)

// Error "The policy UserCanAccessResource cannot be used because its disabled."
```
