Stdlib.Result(3)

πŸ’– NAME πŸ’–

Stdlib.Result β€” and the description is literally just β€œno description,” bestie. Iconic mysterious behavior. This is the Stdlib.Result(3) page from the OCaml library, and we are about to go through every single type and val, no skips, no cap.

🐚 Module 🐚

The module is Stdlib.Result. Main character energy only.

πŸ“š Documentation πŸ“š

Okay so the docs say Module Result, and it is aliased like this:

Module Result
 : (module Stdlib__Result)

Then we get into it:

✨ Results ✨

The type for result values is literally:

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

It is the type for result values: either a value Ok v or an error Error e. Periodt.

  • val ok : 'a -> ('a, 'e) result β€” ok v is Ok v. Slay.
  • 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 otherwise it raises.
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 it 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 otherwise it raises.
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. That is the rule, bestie.

πŸ¦‹ 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.

Okay bestie, that is the whole Stdlib.Result page β€” every val, every predicate, every conversion, and the syntax module, all of it. Source/version is OCamldoc, dated 2026-06-22, and the footer was Stdlib.Result(3). Byeee, go slay your result types πŸ’…βœ¨

πŸ“¦ where this page comes from