package base
Install
dune-project
Dependency
Authors
Maintainers
Sources
md5=2100b0ed13fecf43be86ed45c5b2cc4d
sha512=628610caff7e124631870fa1e29661caac28bdfdb18750ee43b868037da3d65d6dd9023b4be7c4c52405679efb5e865a6632d95606a22b28a36636a6bf706ef3
doc/base/Base/Result/index.html
Module Base.ResultSource
Result is often used to handle error messages.
'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.
include Sexplib0.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.tval t_sexp_grammar :
'ok Sexplib0.Sexp_grammar.t ->
'err Sexplib0.Sexp_grammar.t ->
('ok, 'err) t Sexplib0.Sexp_grammar.tval hash_fold_t :
(Hash.state -> 'a -> Hash.state) ->
(Hash.state -> 'b -> Hash.state) ->
Hash.state ->
('a, 'b) t ->
Hash.stateinclude Monad.S2_local with type ('a, 'err) t := ('a, 'err) t
Same as Infix, except the monad type has two arguments. The second is always just passed through.
The same as S except the monad type has two arguments. The second is always just passed through.
e.g., failf "Couldn't find bloogle %s" (Bloogle.to_string b).
val combine :
('ok1, 'err) t ->
('ok2, 'err) t ->
ok:('ok1 -> 'ok2 -> 'ok3) ->
err:('err -> 'err -> 'err) ->
('ok3, 'err) tReturns Ok if both are Ok and Error otherwise.
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.
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.
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)))ok_if_true returns Ok () if bool is true, and Error error if it is false.