Module Base.ResultSource

Result is often used to handle error messages.

module Invariant := Base__.Invariant_intf.Definitions
Sourcetype (('ok : value_or_null), ('err : value_or_null)) t__immediate = ('ok, 'err) result =
  1. | Ok of 'ok
  2. | Error of 'err

'ok is the return type, and 'err is often an error message string.

  type nat =
    | Zero
    | Succ of nat

  let pred = function
    | Succ n -> Ok n
    | Zero -> Error "Zero does not have a predecessor"
  ;;

The return type of pred could be nat option, but (nat, string) Result.t gives more control over the error message.

Sourceand (('ok : value_or_null), ('err : value_or_null)) t__immediate64 = ('ok, 'err) result =
  1. | Ok of 'ok
  2. | Error of 'err

'ok is the return type, and 'err is often an error message string.

  type nat =
    | Zero
    | Succ of nat

  let pred = function
    | Succ n -> Ok n
    | Zero -> Error "Zero does not have a predecessor"
  ;;

The return type of pred could be nat option, but (nat, string) Result.t gives more control over the error message.

Sourceand (('ok : value_or_null), ('err : value_or_null)) t = ('ok, 'err) result =
  1. | Ok of 'ok
  2. | Error of 'err

'ok is the return type, and 'err is often an error message string.

  type nat =
    | Zero
    | Succ of nat

  let pred = function
    | Succ n -> Ok n
    | Zero -> Error "Zero does not have a predecessor"
  ;;

The return type of pred could be nat option, but (nat, string) Result.t gives more control over the error message.

Sourceval sexp_of_t__immediate : ('ok : value_or_null) ('err : value_or_null). ('ok -> Sexplib0.Sexp.t) -> ('err -> Sexplib0.Sexp.t) -> ('ok, 'err) t__immediate -> Sexplib0.Sexp.t
Sourceval sexp_of_t__immediate64 : ('ok : value_or_null) ('err : value_or_null). ('ok -> Sexplib0.Sexp.t) -> ('err -> Sexplib0.Sexp.t) -> ('ok, 'err) t__immediate64 -> Sexplib0.Sexp.t
Sourceval sexp_of_t : ('ok : value_or_null) ('err : value_or_null). ('ok -> Sexplib0.Sexp.t) -> ('err -> Sexplib0.Sexp.t) -> ('ok, 'err) t -> Sexplib0.Sexp.t
Sourceval sexp_of_t__immediate__stack : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> Sexplib0.Sexp.t @ local) -> ('err @ local -> Sexplib0.Sexp.t @ local) -> ('ok, 'err) t__immediate @ local -> Sexplib0.Sexp.t @ local
Sourceval sexp_of_t__immediate64__stack : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> Sexplib0.Sexp.t @ local) -> ('err @ local -> Sexplib0.Sexp.t @ local) -> ('ok, 'err) t__immediate64 @ local -> Sexplib0.Sexp.t @ local
Sourceval sexp_of_t__stack : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> Sexplib0.Sexp.t @ local) -> ('err @ local -> Sexplib0.Sexp.t @ local) -> ('ok, 'err) t @ local -> Sexplib0.Sexp.t @ local
Sourceval t_of_sexp__immediate : ('ok : value_or_null) ('err : value_or_null). (Sexplib0.Sexp.t -> 'ok) -> (Sexplib0.Sexp.t -> 'err) -> Sexplib0.Sexp.t -> ('ok, 'err) t__immediate
Sourceval t_of_sexp__immediate64 : ('ok : value_or_null) ('err : value_or_null). (Sexplib0.Sexp.t -> 'ok) -> (Sexplib0.Sexp.t -> 'err) -> Sexplib0.Sexp.t -> ('ok, 'err) t__immediate64
Sourceval t_of_sexp : ('ok : value_or_null) ('err : value_or_null). (Sexplib0.Sexp.t -> 'ok) -> (Sexplib0.Sexp.t -> 'err) -> Sexplib0.Sexp.t -> ('ok, 'err) t
Sourceval t_sexp_grammar__immediate : ('ok : value_or_null) ('err : value_or_null). 'ok Sexplib0.Sexp_grammar.t -> 'err Sexplib0.Sexp_grammar.t -> ('ok, 'err) t__immediate Sexplib0.Sexp_grammar.t @@ portable
Sourceval t_sexp_grammar__immediate64 : ('ok : value_or_null) ('err : value_or_null). 'ok Sexplib0.Sexp_grammar.t -> 'err Sexplib0.Sexp_grammar.t -> ('ok, 'err) t__immediate64 Sexplib0.Sexp_grammar.t @@ portable
Sourceval t_sexp_grammar : ('ok : value_or_null) ('err : value_or_null). 'ok Sexplib0.Sexp_grammar.t -> 'err Sexplib0.Sexp_grammar.t -> ('ok, 'err) t Sexplib0.Sexp_grammar.t @@ portable
Sourceval compare__immediate : ('ok : value_or_null) ('err : value_or_null). ('ok -> 'ok -> int) -> ('err -> 'err -> int) -> ('ok, 'err) t__immediate -> ('ok, 'err) t__immediate -> int
Sourceval compare__immediate__local : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> 'ok @ local -> int) -> ('err @ local -> 'err @ local -> int) -> ('ok, 'err) t__immediate @ local -> ('ok, 'err) t__immediate @ local -> int
Sourceval compare__immediate64 : ('ok : value_or_null) ('err : value_or_null). ('ok -> 'ok -> int) -> ('err -> 'err -> int) -> ('ok, 'err) t__immediate64 -> ('ok, 'err) t__immediate64 -> int
Sourceval compare__immediate64__local : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> 'ok @ local -> int) -> ('err @ local -> 'err @ local -> int) -> ('ok, 'err) t__immediate64 @ local -> ('ok, 'err) t__immediate64 @ local -> int
Sourceval compare : ('ok : value_or_null) ('err : value_or_null). ('ok -> 'ok -> int) -> ('err -> 'err -> int) -> ('ok, 'err) t -> ('ok, 'err) t -> int
Sourceval compare__local : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> 'ok @ local -> int) -> ('err @ local -> 'err @ local -> int) -> ('ok, 'err) t @ local -> ('ok, 'err) t @ local -> int
Sourceval equal__immediate : ('ok : value_or_null) ('err : value_or_null). ('ok -> 'ok -> bool) -> ('err -> 'err -> bool) -> ('ok, 'err) t__immediate -> ('ok, 'err) t__immediate -> bool
Sourceval equal__immediate__local : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> 'ok @ local -> bool) -> ('err @ local -> 'err @ local -> bool) -> ('ok, 'err) t__immediate @ local -> ('ok, 'err) t__immediate @ local -> bool
Sourceval equal__immediate64 : ('ok : value_or_null) ('err : value_or_null). ('ok -> 'ok -> bool) -> ('err -> 'err -> bool) -> ('ok, 'err) t__immediate64 -> ('ok, 'err) t__immediate64 -> bool
Sourceval equal__immediate64__local : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> 'ok @ local -> bool) -> ('err @ local -> 'err @ local -> bool) -> ('ok, 'err) t__immediate64 @ local -> ('ok, 'err) t__immediate64 @ local -> bool
Sourceval equal : ('ok : value_or_null) ('err : value_or_null). ('ok -> 'ok -> bool) -> ('err -> 'err -> bool) -> ('ok, 'err) t -> ('ok, 'err) t -> bool
Sourceval equal__local : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> 'ok @ local -> bool) -> ('err @ local -> 'err @ local -> bool) -> ('ok, 'err) t @ local -> ('ok, 'err) t @ local -> bool
Sourceval hash_fold_t__immediate : ('ok : value_or_null) ('err : value_or_null). (Ppx_hash_lib.Std.Hash.state -> 'ok -> Ppx_hash_lib.Std.Hash.state) -> (Ppx_hash_lib.Std.Hash.state -> 'err -> Ppx_hash_lib.Std.Hash.state) -> Ppx_hash_lib.Std.Hash.state -> ('ok, 'err) t__immediate -> Ppx_hash_lib.Std.Hash.state
Sourceval hash_fold_t__immediate64 : ('ok : value_or_null) ('err : value_or_null). (Ppx_hash_lib.Std.Hash.state -> 'ok -> Ppx_hash_lib.Std.Hash.state) -> (Ppx_hash_lib.Std.Hash.state -> 'err -> Ppx_hash_lib.Std.Hash.state) -> Ppx_hash_lib.Std.Hash.state -> ('ok, 'err) t__immediate64 -> Ppx_hash_lib.Std.Hash.state
Sourceval hash_fold_t : ('ok : value_or_null) ('err : value_or_null). (Ppx_hash_lib.Std.Hash.state -> 'ok -> Ppx_hash_lib.Std.Hash.state) -> (Ppx_hash_lib.Std.Hash.state -> 'err -> Ppx_hash_lib.Std.Hash.state) -> Ppx_hash_lib.Std.Hash.state -> ('ok, 'err) t -> Ppx_hash_lib.Std.Hash.state
Sourceval globalize__immediate : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> 'ok) -> ('err @ local -> 'err) -> ('ok, 'err) t__immediate @ local -> ('ok, 'err) t__immediate
Sourceval globalize__immediate64 : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> 'ok) -> ('err @ local -> 'err) -> ('ok, 'err) t__immediate64 @ local -> ('ok, 'err) t__immediate64
Sourceval globalize : ('ok : value_or_null) ('err : value_or_null). ('ok @ local -> 'ok) -> ('err @ local -> 'err) -> ('ok, 'err) t @ local -> ('ok, 'err) t
include Monad.S2__'value_or_null_mod_maybe_null'__local with type (('a : value_or_null), 'err) t := ('a, 'err) t
Sourceval join : ('a : value_or_null mod maybe_null) 'i 'j 'k 'p 'q. (('a, 'p) t, 'p) t -> ('a, 'p) t

Combines nested t into just one layer. Equivalent to bind t ~f:Fn.id.

Sourceval ignore_m : ('a : value_or_null mod maybe_null) 'i 'j 'p 'q. ('a, 'p) t -> (unit, 'p) t

Ignores contained values of t. Equivalent to map t ~f:ignore.

Sourceval all : ('a : value_or_null mod maybe_null) 'i 'p 'q. ('a, 'p) t list -> ('a list, 'p) t

Combines a list of t.

Sourceval all_unit : 'i 'p 'q. (unit, 'p) t list -> (unit, 'p) t

Combines a list of t whose contents are unimportant.

Sourceval (>>=) : ('a : value_or_null mod maybe_null) ('b : value_or_null mod maybe_null) 'i 'j 'k 'p 'q. ('a, 'p) t -> ('a -> ('b, 'p) t) @ local -> ('b, 'p) t

Infix bind.

Sourceval (>>|) : ('a : value_or_null mod maybe_null) ('b : value_or_null mod maybe_null) 'i 'j 'p 'q. ('a, 'p) t -> ('a -> 'b) @ local -> ('b, 'p) t

Infix map.

Sourcemodule Monad_infix : sig ... end
Sourcemodule Let_syntax : sig ... end
Sourcemodule Error : Monad.S2__'value_or_null_mod_maybe_null'__local with type (('err : value_or_null), 'a) t := ('a, 'err) t
include Invariant.S2 with type ('ok, 'err) t := ('ok, 'err) t
Sourceval invariant : ('a -> unit) -> ('b -> unit) -> ('a, 'b) t -> unit
Sourceval fail : 'err -> (_, 'err) t @@ portable
Sourceval failf : ('a, unit, string, (_, string) t) format4 -> 'a @@ portable

e.g., failf "Couldn't find bloogle %s" (Bloogle.to_string b).

Sourceval is_ok : ('ok : value_or_null) ('err : value_or_null). ('ok, 'err) t @ local -> bool @@ portable
Sourceval is_error : ('ok : value_or_null) ('err : value_or_null). ('ok, 'err) t @ local -> bool @@ portable
Sourceval ok : ('ok : value_or_null) ('err : value_or_null). ('ok, 'err) t -> 'ok option @@ portable
Sourceval ok_or_null : 'ok ('err : value_or_null). ('ok, 'err) t -> 'ok or_null @@ portable [@@zero_alloc arity 1]
Sourceval ok_exn : ('ok : value_or_null). ('ok, exn) t -> 'ok @@ portable
Sourceval ok_or_failwith : ('ok : value_or_null). ('ok, string) t -> 'ok @@ portable
Sourceval error : ('ok : value_or_null) ('err : value_or_null). ('ok, 'err) t -> 'err option @@ portable
Sourceval error_or_null : ('ok : value_or_null) 'err. ('ok, 'err) t -> 'err or_null @@ portable [@@zero_alloc arity 1]
Sourceval of_option : ('ok : value_or_null) ('err : value_or_null). 'ok option -> error:'err -> ('ok, 'err) t @@ portable
Sourceval of_or_null : 'ok ('err : value_or_null). 'ok or_null -> error:'err -> ('ok, 'err) t @@ portable
Sourceval of_option_or_thunk : ('ok : value_or_null) ('err : value_or_null). 'ok option -> error:(unit -> 'err) @ local once -> ('ok, 'err) t @@ portable
Sourceval iter : ('ok : value_or_null) ('err : value_or_null). ('ok, 'err) t -> f:('ok -> unit) @ local once -> unit @@ portable
Sourceval iter_error : ('ok : value_or_null) ('err : value_or_null). ('ok, 'err) t -> f:('err -> unit) @ local once -> unit @@ portable
Sourceval return : ('ok : value_or_null) 'err. 'ok -> ('ok, 'err) t @@ portable
Sourceval bind : ('a : value_or_null) ('b : value_or_null) 'err. ('a, 'err) t -> f:('a -> ('b, 'err) t) @ local -> ('b, 'err) t @@ portable
Sourceval map : ('a : value_or_null) ('b : value_or_null) 'err. ('a, 'err) t -> f:('a -> 'b) @ local -> ('b, 'err) t @@ portable
Sourceval map_error : ('ok : value_or_null) ('err : value_or_null) ('c : value_or_null). ('ok, 'err) t -> f:('err -> 'c) @ local once -> ('ok, 'c) t @@ portable
Sourceval combine : ('ok1 : value_or_null) ('ok2 : value_or_null) ('ok3 : value_or_null) ('err : value_or_null). ('ok1, 'err) t -> ('ok2, 'err) t -> ok:('ok1 -> ('ok2 -> 'ok3) @ local once) @ local once -> err:('err -> ('err -> 'err) @ local once) @ local once -> ('ok3, 'err) t @@ portable

Returns Ok if both are Ok and Error otherwise.

Sourceval combine_errors : ('ok : value_or_null) ('err : value_or_null). ('ok, 'err) t list -> ('ok list, 'err list) t @@ portable

combine_errors ts returns Ok if every element in ts is Ok, else it returns Error with all the errors in ts.

This is similar to all from Monad.S2, with the difference that all only returns the first error.

Sourceval combine_errors_unit : ('err : value_or_null). (unit, 'err) t list -> (unit, 'err list) t @@ portable

combine_errors_unit returns Ok if every element in ts is Ok (), else it returns Error with all the errors in ts, like combine_errors.

Sourceval to_either : ('ok : value_or_null) ('err : value_or_null). ('ok, 'err) t -> ('ok, 'err) Base__.Either0.t @@ portable

to_either is useful with List.partition_map. For example:

  let ints, exns =
    List.partition_map [ "1"; "two"; "three"; "4" ] ~f:(fun string ->
      Result.to_either (Result.try_with (fun () -> Int.of_string string)))
  ;;
Sourceval of_either : ('ok : value_or_null) ('err : value_or_null). ('ok, 'err) Base__.Either0.t -> ('ok, 'err) t @@ portable
Sourceval ok_if_true : ('err : value_or_null). bool -> error:'err -> (unit, 'err) t @@ portable

ok_if_true returns Ok () if bool is true, and Error error if it is false.

Sourceval transpose_opt : ('ok : value_or_null) ('err : value_or_null). ('ok option, 'err) t -> ('ok, 'err) t option @@ portable

transpose_opt x transposes a result of an option into an option of a result

Concretely, Ok None maps to None, Ok (Some x) maps to Some (Ok x), and Error e maps to Some (Error e).

Inverse of Option.transpose_result.

Sourceval try_with : ('a : value_or_null). (unit -> 'a) @ local once -> ('a, exn) t @@ portable
Sourcemodule Export : sig ... end