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'okis the return type, and'erris 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
predcould benat option, but(nat, string) Result.tgives 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) tval 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 -> intval equal : ('ok -> 'ok -> bool) -> ('err -> 'err -> bool) -> ('ok, 'err) t -> ('ok, 'err) t -> boolval 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 ... endmodule Monad_infix : Base__.Monad_intf.Infix2 with type ('a, 'e) t := ('a, 'e) tval bind : ('a, 'e) t -> f:('a -> ('b, 'e) t) -> ('b, 'e) tval return : 'a -> ('a, _) tval map : ('a, 'e) t -> f:('a -> 'b) -> ('b, 'e) tval join : (('a, 'e) t, 'e) t -> ('a, 'e) tval ignore_m : (_, 'e) t -> (unit, 'e) tval all : ('a, 'e) t list -> ('a list, 'e) tval 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) tval failf : ('a, unit, string, (_, string) t) Stdlib.format4 -> 'ae.g.,
failf "Couldn't find bloogle %s" (Bloogle.to_string b).
val is_ok : (_, _) t -> boolval is_error : (_, _) t -> boolval ok : ('ok, _) t -> 'ok optionval ok_exn : ('ok, exn) t -> 'okval ok_or_failwith : ('ok, string) t -> 'okval error : (_, 'err) t -> 'err optionval of_option : 'ok option -> error:'err -> ('ok, 'err) tval iter : ('ok, _) t -> f:('ok -> unit) -> unitval iter_error : (_, 'err) t -> f:('err -> unit) -> unitval map : ('ok, 'err) t -> f:('ok -> 'c) -> ('c, 'err) tval map_error : ('ok, 'err) t -> f:('err -> 'c) -> ('ok, 'c) tval combine : ('ok1, 'err) t -> ('ok2, 'err) t -> ok:('ok1 -> 'ok2 -> 'ok3) -> err:('err -> 'err -> 'err) -> ('ok3, 'err) tReturns
Okif both areOkandErrorotherwise.
val combine_errors : ('ok, 'err) t list -> ('ok list, 'err list) tcombine_errors tsreturnsOkif every element intsisOk, else it returnsErrorwith all the errors ints.This is similar to
allfromMonad.S2, with the difference thatallonly returns the first error.
val combine_errors_unit : (unit, 'err) t list -> (unit, 'err list) tcombine_errors_unitreturnsOkif every element intsisOk (), else it returnsErrorwith all the errors ints, likecombine_errors.
val to_either : ('ok, 'err) t -> ('ok, 'err) Base__.Either0.tto_eitheris 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) tval ok_fst : ('ok, 'err) t -> ('ok, 'err) Base__.Either0.tval ok_if_true : bool -> error:'err -> (unit, 'err) tok_if_truereturnsOk ()ifboolis true, andError errorif it is false.
val try_with : (unit -> 'a) -> ('a, exn) t
module Export : sig ... end