Module Base.Result
Result
is often used to handle error messages.
type ('ok, 'err) t
= ('ok, 'err) Base__.Import.Caml.result
=
|
Ok of 'ok
|
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 benat option
, but(nat, string) Result.t
gives more control over the error message.
include Sexpable.S2 with type ('ok, 'err) t := ('ok, 'err) t
val t_of_sexp : (Sexplib0.Sexp.t -> 'a) -> (Sexplib0.Sexp.t -> 'b) -> Sexplib0.Sexp.t -> ('a, 'b) t
val sexp_of_t : ('a -> Sexplib0.Sexp.t) -> ('b -> Sexplib0.Sexp.t) -> ('a, 'b) t -> Sexplib0.Sexp.t
val compare : ('ok -> 'ok -> int) -> ('err -> 'err -> int) -> ('ok, 'err) t -> ('ok, 'err) t -> int
val equal : ('ok -> 'ok -> bool) -> ('err -> 'err -> bool) -> ('ok, 'err) t -> ('ok, 'err) t -> bool
val hash_fold_t : (Hash.state -> 'ok -> Hash.state) -> (Hash.state -> 'err -> Hash.state) -> Hash.state -> ('ok, 'err) t -> Hash.state
include Monad.S2 with type ('a, 'err) t := ('a, 'err) t
include Base__.Monad_intf.Syntax2 with type ('a, 'e) t := ('a, 'e) t
module Let_syntax : sig ... end
module Monad_infix : Base__.Monad_intf.Infix2 with type ('a, 'e) t := ('a, 'e) t
val bind : ('a, 'e) t -> f:('a -> ('b, 'e) t) -> ('b, 'e) t
val return : 'a -> ('a, _) t
val map : ('a, 'e) t -> f:('a -> 'b) -> ('b, 'e) t
val join : (('a, 'e) t, 'e) t -> ('a, 'e) t
val ignore_m : (_, 'e) t -> (unit, 'e) t
val all : ('a, 'e) t list -> ('a list, 'e) t
val all_unit : (unit, 'e) t list -> (unit, 'e) t
include Base__.Invariant_intf.S2 with type ('ok, 'err) t := ('ok, 'err) t
val invariant : 'a Base__.Invariant_intf.inv -> 'b Base__.Invariant_intf.inv -> ('a, 'b) t Base__.Invariant_intf.inv
val fail : 'err -> (_, 'err) t
val failf : ('a, unit, string, (_, string) t) Stdlib.format4 -> 'a
e.g.,
failf "Couldn't find bloogle %s" (Bloogle.to_string b)
.
val is_ok : (_, _) t -> bool
val is_error : (_, _) t -> bool
val ok : ('ok, _) t -> 'ok option
val ok_exn : ('ok, exn) t -> 'ok
val ok_or_failwith : ('ok, string) t -> 'ok
val error : (_, 'err) t -> 'err option
val of_option : 'ok option -> error:'err -> ('ok, 'err) t
val iter : ('ok, _) t -> f:('ok -> unit) -> unit
val iter_error : (_, 'err) t -> f:('err -> unit) -> unit
val map : ('ok, 'err) t -> f:('ok -> 'c) -> ('c, 'err) t
val map_error : ('ok, 'err) t -> f:('err -> 'c) -> ('ok, 'c) t
val combine : ('ok1, 'err) t -> ('ok2, 'err) t -> ok:('ok1 -> 'ok2 -> 'ok3) -> err:('err -> 'err -> 'err) -> ('ok3, 'err) t
Returns
Ok
if both areOk
andError
otherwise.
val combine_errors : ('ok, 'err) t list -> ('ok list, 'err list) t
combine_errors ts
returnsOk
if every element ints
isOk
, else it returnsError
with all the errors ints
.This is similar to
all
fromMonad.S2
, with the difference thatall
only returns the first error.
val combine_errors_unit : (unit, 'err) t list -> (unit, 'err list) t
combine_errors_unit
returnsOk
if every element ints
isOk ()
, else it returnsError
with all the errors ints
, likecombine_errors
.
val to_either : ('ok, 'err) t -> ('ok, 'err) Base__.Either0.t
to_either
is useful withList.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) Base__.Either0.t -> ('ok, 'err) t
val ok_fst : ('ok, 'err) t -> ('ok, 'err) Base__.Either0.t
val ok_if_true : bool -> error:'err -> (unit, 'err) t
ok_if_true
returnsOk ()
ifbool
is true, andError error
if it is false.
val try_with : (unit -> 'a) -> ('a, exn) t
module Export : sig ... end