Module Core.Result

This module extends Base.Result.

type (('a : value_or_null), ('b : value_or_null)) t = ('a, 'b) Base.Result.t =
  1. | Ok of 'a
  2. | Error of 'b
val bin_size_t : 'a 'b. ('a : value_or_null) Bin_prot.Size.sizer -> ('b : value_or_null) Bin_prot.Size.sizer -> (('a : value_or_null), ('b : value_or_null)) t Bin_prot.Size.sizer
val bin_size_t__local : 'a 'b. ('a : value_or_null) Bin_prot.Size.sizer__local -> ('b : value_or_null) Bin_prot.Size.sizer__local -> (('a : value_or_null), ('b : value_or_null)) t Bin_prot.Size.sizer__local
val bin_write_t : 'a 'b. ('a : value_or_null) Bin_prot.Write.writer -> ('b : value_or_null) Bin_prot.Write.writer -> (('a : value_or_null), ('b : value_or_null)) t Bin_prot.Write.writer
val bin_write_t__local : 'a 'b. ('a : value_or_null) Bin_prot.Write.writer__local -> ('b : value_or_null) Bin_prot.Write.writer__local -> (('a : value_or_null), ('b : value_or_null)) t Bin_prot.Write.writer__local
val bin_writer_t : 'a 'b. ('a : value_or_null) Bin_prot.Type_class.writer -> ('b : value_or_null) Bin_prot.Type_class.writer -> (('a : value_or_null), ('b : value_or_null)) t Bin_prot.Type_class.writer
val bin_read_t : 'a 'b. ('a : value_or_null) Bin_prot.Read.reader -> ('b : value_or_null) Bin_prot.Read.reader -> (('a : value_or_null), ('b : value_or_null)) t Bin_prot.Read.reader
val __bin_read_t__ : 'a 'b. ('a : value_or_null) Bin_prot.Read.reader -> ('b : value_or_null) Bin_prot.Read.reader -> (('a : value_or_null), ('b : value_or_null)) t Bin_prot.Read.vtag_reader
val bin_reader_t : 'a 'b. ('a : value_or_null) Bin_prot.Type_class.reader -> ('b : value_or_null) Bin_prot.Type_class.reader -> (('a : value_or_null), ('b : value_or_null)) t Bin_prot.Type_class.reader
val bin_t : 'a 'b. ('a : value_or_null) Bin_prot.Type_class.t -> ('b : value_or_null) Bin_prot.Type_class.t -> (('a : value_or_null), ('b : value_or_null)) t Bin_prot.Type_class.t
module Diff : sig ... end
val quickcheck_generator : 'a 'b. ('a : value_or_null) Ppx_quickcheck_runtime.Base_quickcheck.Generator.t -> ('b : value_or_null) Ppx_quickcheck_runtime.Base_quickcheck.Generator.t -> (('a : value_or_null), ('b : value_or_null)) t Ppx_quickcheck_runtime.Base_quickcheck.Generator.t
val quickcheck_observer : 'a 'b. ('a : value_or_null) Ppx_quickcheck_runtime.Base_quickcheck.Observer.t -> ('b : value_or_null) Ppx_quickcheck_runtime.Base_quickcheck.Observer.t -> (('a : value_or_null), ('b : value_or_null)) t Ppx_quickcheck_runtime.Base_quickcheck.Observer.t
val quickcheck_shrinker : 'a 'b. ('a : value_or_null) Ppx_quickcheck_runtime.Base_quickcheck.Shrinker.t -> ('b : value_or_null) Ppx_quickcheck_runtime.Base_quickcheck.Shrinker.t -> (('a : value_or_null), ('b : value_or_null)) t Ppx_quickcheck_runtime.Base_quickcheck.Shrinker.t
val typerep_of_t : 'a Typerep_lib.Std.Typerep.t -> 'b Typerep_lib.Std.Typerep.t -> ('a, 'b) t Typerep_lib.Std.Typerep.t @@ portable
val typename_of_t : 'a Typerep_lib.Std.Typename.t -> 'b Typerep_lib.Std.Typename.t -> ('a, 'b) t Typerep_lib.Std.Typename.t @@ portable
type (('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.

and (('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.

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

Convert a value to a t.

val bind : 'a 'b 'i 'j 'k 'p 'q. ('a, 'p) t -> f:('a -> ('b, 'p) t) @ local -> ('b, 'p) t

Sequences computations. bind t ~f computes f v for value(s) v in t. Well-behaved monads satisfy these "laws" (where ( >>= ) is the infix bind operator):

  • map t ~f is equivalent to bind t ~f:(fun x -> return (f x))
  • return x >>= f is equivalent to f x
  • t >>= return is equivalent to t
  • (t >>= f) >>= g is equivalent to t >>= fun x -> f x >>= g
val join : 'a '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.

val ignore_m : 'a 'i 'j 'p 'q. ('a, 'p) t -> (unit, 'p) t

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

val all : 'a 'i 'p 'q. ('a, 'p) t list -> ('a list, 'p) t

Combines a list of t.

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

Combines a list of t whose contents are unimportant.

val (>>=) : 'a 'b 'i 'j 'k 'p 'q. ('a, 'p) t -> ('a -> ('b, 'p) t) @ local -> ('b, 'p) t

Infix bind.

val (>>|) : 'a 'b 'i 'j 'p 'q. ('a, 'p) t -> ('a -> 'b) @ local -> ('b, 'p) t

Infix map.

module Monad_infix = Base.Result.Monad_infix
module Let_syntax = Base.Result.Let_syntax
module Error = Base.Result.Error
val invariant : ('a -> unit) -> ('b -> unit) -> ('a, 'b) t -> unit
val fail : 'err -> (_, 'err) t @@ portable
val failf : ('a, unit, string, (_, string) t) format4 -> 'a @@ portable

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

val is_ok : 'ok 'err. ('ok, 'err) t -> bool
val is_error : 'ok 'err. ('ok, 'err) t -> bool
val ok : 'ok 'err. ('ok, 'err) t -> 'ok option @@ portable
val ok_exn : 'ok. ('ok, exn) t -> 'ok @@ portable
val ok_or_failwith : 'ok. ('ok, string) t -> 'ok @@ portable
val error : 'ok 'err. ('ok, 'err) t -> 'err option @@ portable
val of_option : 'ok 'err. 'ok option -> error:'err -> ('ok, 'err) t @@ portable
val of_option_or_thunk : 'ok 'err. 'ok option -> error:(unit -> 'err) -> ('ok, 'err) t @@ portable
val iter : 'ok 'err. ('ok, 'err) t -> f:('ok -> unit) @ local -> unit @@ portable
val iter_error : 'ok 'err. ('ok, 'err) t -> f:('err -> unit) @ local -> unit @@ portable
val map : 'a 'b 'err. ('a, 'err) t -> f:('a -> 'b) @ local -> ('b, 'err) t @@ portable
val map_error : 'ok 'err 'c. ('ok, 'err) t -> f:('err -> 'c) @ local -> ('ok, 'c) t @@ portable
val combine : 'ok1 'ok2 'ok3 'err. ('ok1, 'err) t -> ('ok2, 'err) t -> ok:('ok1 -> ('ok2 -> 'ok3) @ local) @ local -> (err:('err -> ('err -> 'err) @ local) @ local -> ('ok3, 'err) t) @ local @@ portable

Returns Ok if both are Ok and Error otherwise.

val combine_errors : 'ok 'err. ('ok, 'err) t list -> ('ok list, 'err list) t

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.

val combine_errors_unit : 'err. (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.

val to_either : 'ok 'err. ('ok, 'err) t -> ('ok, 'err) Base__.Either0.t

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)))
  ;;
val of_either : 'ok 'err. ('ok, 'err) Base__.Either0.t -> ('ok, 'err) t
val ok_if_true : 'err. bool -> error:'err -> (unit, 'err) t @@ portable

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

val try_with : 'a. (unit -> 'a) @ local -> ('a, exn) t @@ portable
module Export = Base.Result.Export
module Stable : sig ... end