CCResultError Monad
Uses the new "result" type from OCaml 4.03.
val return : 'a -> ( 'a, 'err ) tSuccessfully return a value.
val fail : 'err -> ( 'a, 'err ) tFail with an error.
val of_exn : exn -> ( 'a, string ) tof_exn e uses Printexc to print the exception as a string.
val of_exn_trace : exn -> ( 'a, string ) tof_exn_trace e is similar to of_exn e, but it adds the stacktrace to the error message.
Remember to call Printexc.record_backtrace true and compile with the debug flag for this to work.
val fail_printf :
( 'a, Stdlib.Buffer.t, unit, ( 'b, string ) t ) Stdlib.format4 ->
'afail_printf format uses format to obtain an error message and then returns Error msg.
val fail_fprintf :
( 'a, Stdlib.Format.formatter, unit, ( 'b, string ) t ) Stdlib.format4 ->
'afail_fprintf format uses format to obtain an error message and then returns Error msg.
add_ctx msg leaves Ok x untouched, but transforms Error s into Error s' where s' contains the additional context given by msg.
val add_ctxf :
( 'a, Stdlib.Format.formatter, unit, ( 'b, string ) t -> ( 'b, string ) t )
Stdlib.format4 ->
'aadd_ctxf format_message is similar to add_ctx but with Format for printing the message (eagerly). Example:
add_ctxf "message(number %d, foo: %B)" 42 true (Error "error)"Map a fallible operation through an option.
Like map, but also with a function that can transform the error message in case of failure.
val iter : ( 'a -> unit ) -> ( 'a, _ ) t -> unitApply the function only in case of Ok.
val iter_err : ( 'err -> unit ) -> ( _, 'err ) t -> unitApply the function in case of Error.
val get_exn : ( 'a, _ ) t -> 'aExtract the value x from Ok x, fails otherwise. You should be careful with this function, and favor other combinators whenever possible.
val get_or : ( 'a, _ ) t -> default:'a -> 'aget_or e ~default returns x if e = Ok x, default otherwise.
val get_or_failwith : ( 'a, string ) t -> 'aget_or_failwith e returns x if e = Ok x, fails otherwise.
val get_lazy : ( 'b -> 'a ) -> ( 'a, 'b ) t -> 'aget_lazy default_fn x unwraps x, but if x = Error e it returns default_fr e instead.
val map_or : ( 'a -> 'b ) -> ( 'a, 'c ) t -> default:'b -> 'bmap_or f e ~default returns f x if e = Ok x, default otherwise.
val catch : ( 'a, 'err ) t -> ok:( 'a -> 'b ) -> err:( 'err -> 'b ) -> 'bcatch e ~ok ~err calls either ok or err depending on the value of e.
val fold : ok:( 'a -> 'b ) -> error:( 'err -> 'b ) -> ( 'a, 'err ) t -> 'bfold ~ok ~error e opens e and, if e = Ok x, returns ok x, otherwise e = Error s and it returns error s.
val fold_ok : ( 'a -> 'b -> 'a ) -> 'a -> ( 'b, _ ) t -> 'afold_ok f acc r will compute f acc x if r=Ok x, and return acc otherwise, as if the result were a mere option.
val is_ok : ( 'a, 'err ) t -> boolReturn true if Ok.
val is_error : ( 'a, 'err ) t -> boolReturn true if Error.
val guard : ( unit -> 'a ) -> ( 'a, exn ) tguard f runs f () and returns its result wrapped in Ok. If f () raises some exception e, then it fails with Error e.
val guard_str : ( unit -> 'a ) -> ( 'a, string ) tval guard_str_trace : ( unit -> 'a ) -> ( 'a, string ) tLike guard_str but uses of_exn_trace instead of of_exn so that the stack trace is printed.
val wrap2 : ( 'a -> 'b -> 'c ) -> 'a -> 'b -> ( 'c, exn ) tLike guard but gives the function two arguments.
val wrap3 : ( 'a -> 'b -> 'c -> 'd ) -> 'a -> 'b -> 'c -> ( 'd, exn ) tLike guard but gives the function three arguments.
join t, in case of success, returns Ok o from Ok (Ok o). Otherwise, it fails with Error e where e is the unwrapped error of t.
both a b, in case of success, returns Ok (o, o') with the ok values of a and b. Otherwise, it fails, and the error of a is chosen over the error of b if both fail.
module Infix : sig ... endinclude module type of InfixInfix version of map with reversed arguments.
Monadic composition. e >>= f proceeds as f x if e is Ok x or returns e if e is an Error.
a <*> b evaluates a and b, and, in case of success, returns Ok (a b). Otherwise, it fails, and the error of a is chosen over the error of b if both fail.
Same as map_l id: returns Ok [x1;…;xn] if l=[Ok x1; …; Ok xn], or the first error otherwise.
map_l f [a1; …; an] applies the function f to a1, …, an ,and, in case of success for every element, returns the list of Ok-value. Otherwise, it fails and returns the first error encountered. Tail-recursive.
choose l selects a member of l that is a Ok _ value, or returns Error l otherwise, where l is the list of errors.
retry n f calls f at most n times, returning the first result of f () that doesn't fail. If f fails n times, retry n f fails with the list of successive errors.
module type MONAD = sig ... endval to_opt : ( 'a, _ ) t -> 'a optionConvert a result to an option.
val of_opt : 'a option -> ( 'a, string ) tConvert an option to a result.
val to_seq : ( 'a, _ ) t -> 'a Stdlib.Seq.tRenamed from to_std_seq since 3.0.