---
name: "Result"
section: "3o"
platform: "linux"
package: "ocaml"
version: "5.5.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/Result"
---

# Result(3o)

Result values.

## NAME

Result - Result values.

## Module

Module   Result

## Documentation

Module **Result**\
  :  **sig end**

Result values.

Result values handle computation results and errors in an explicit and declarative manner without resorting to exceptions.

**Since** 4.08

### Results

*type* **('a, 'e)** *t* =  **('a, 'e) result** =\
  \| Ok **of** **'a**\
  \| Error **of** **'e**

The type for result values. Either a value  **Ok v** or an error  **Error e** .

*val ok* :  **'a -\> ('a, 'e) result**

**ok v** is  **Ok v** .

*val error* :  **'e -\> ('a, 'e) result**

**error e** is  **Error e** .

*val value* :  **('a, 'e) result -\> default:'a -\> 'a**

**value r ~default** is  **v** if  **r** is  **Ok v** and  **default** otherwise.

*val get\_ok* :  **('a, 'e) result -\> 'a**

**get\_ok r** is  **v** if  **r** is  **Ok v** and raise otherwise.

**Raises Invalid\_argument** if  **r** is  **Error \_** .

*val get\_ok'* :  **('a, string) result -\> 'a**

**get\_ok'** is like  **Result.get\_ok** but in case of error uses the error message for raising  **Invalid\_argument** .

**Since** 5.4

*val get\_error* :  **('a, 'e) result -\> 'e**

**get\_error r** is  **e** if  **r** is  **Error e** and raise otherwise.

**Raises Invalid\_argument** if  **r** is  **Ok \_** .

*val error\_to\_failure* :  **('a, string) result -\> 'a**

**error\_to\_failure r** is  **v** if  **r** is  **Ok v** and raises  **Failure e** if  **r** is  **Error e** .

**Since** 5.4

*val bind* :  **('a, 'e) result -\>** **('a -\> ('b, 'e) result) -\> ('b, 'e) result**

**bind r f** is  **f v** if  **r** is  **Ok v** and  **r** if  **r** is  **Error \_** .

*val join* :  **(('a, 'e) result, 'e) result -\> ('a, 'e) result**

**join rr** is  **r** if  **rr** is  **Ok r** and  **rr** if  **rr** is  **Error \_** .

*val map* :  **('a -\> 'b) -\> ('a, 'e) result -\> ('b, 'e) result**

**map f r** is  **Ok (f v)** if  **r** is  **Ok v** and  **r** if  **r** is  **Error \_** .

*val product* :  **('a, 'e) result -\>** **('b, 'e) result -\> ('a \* 'b, 'e) result**

**product r0 r1** is  **Ok (v0, v1)** if  **r0** is  **Ok v0** and  **r1** is  **Ok v1** and otherwise returns the error of  **r0** , if any, or the error of  **r1** .

**Since** 5.4

*val map\_error* :  **('e -\> 'f) -\> ('a, 'e) result -\> ('a, 'f) result**

**map\_error f r** is  **Error (f e)** if  **r** is  **Error e** and  **r** if **r** is  **Ok \_** .

*val fold* :  **ok:('a -\> 'c) -\> error:('e -\> 'c) -\> ('a, 'e) result -\> 'c**

**fold ~ok ~error r** is  **ok v** if  **r** is  **Ok v** and  **error e** if  **r** is  **Error e** .

*val retract* :  **('a, 'a) result -\> 'a**

**retract r** is  **v** if  **r** is  **Ok v** or  **Error v** .

**Since** 5.4

*val iter* :  **('a -\> unit) -\> ('a, 'e) result -\> unit**

**iter f r** is  **f v** if  **r** is  **Ok v** and  **()** otherwise.

*val iter\_error* :  **('e -\> unit) -\> ('a, 'e) result -\> unit**

**iter\_error f r** is  **f e** if  **r** is  **Error e** and  **()** otherwise.

### Predicates and comparisons

*val is\_ok* :  **('a, 'e) result -\> bool**

**is\_ok r** is  **true** if and only if  **r** is  **Ok \_** .

*val is\_error* :  **('a, 'e) result -\> bool**

**is\_error r** is  **true** if and only if  **r** is  **Error \_** .

*val equal* :  **ok:('a -\> 'a -\> bool) -\>** **error:('e -\> 'e -\> bool) -\>** **('a, 'e) result -\> ('a, 'e) result -\> bool**

**equal ~ok ~error r0 r1** tests equality of  **r0** and  **r1** using  **ok** and  **error** to respectively compare values wrapped by  **Ok \_** and **Error \_** .

*val compare* :  **ok:('a -\> 'a -\> int) -\>** **error:('e -\> 'e -\> int) -\>** **('a, 'e) result -\> ('a, 'e) result -\> int**

**compare ~ok ~error r0 r1** totally orders  **r0** and  **r1** using  **ok** and **error** to respectively compare values wrapped by  **Ok \_**  and  **Error \_** . **Ok \_** values are smaller than  **Error \_** values.

### Converting

*val to\_option* :  **('a, 'e) result -\> 'a option**

**to\_option r** is  **r** as an option, mapping  **Ok v** to  **Some v** and **Error \_** to  **None** .

*val to\_list* :  **('a, 'e) result -\> 'a list**

**to\_list r** is  **\[v\]** if  **r** is  **Ok v** and  **\[\]** otherwise.

*val to\_seq* :  **('a, 'e) result -\> 'a Seq.t**

**to\_seq r** is  **r** as a sequence.  **Ok v** is the singleton sequence containing  **v** and  **Error \_** is the empty sequence.

### Syntax

*module Syntax :* **sig end**

Binding operators. See manual section 12.23 for details.

**Since** 5.4
