module CCError:sig..end
The variant is polymorphic in the error type
Since 0.5
type'asequence =('a -> unit) -> unit
type'aequal ='a -> 'a -> bool
type'aord ='a -> 'a -> int
type'aprinter =Buffer.t -> 'a -> unit
type'aformatter =Format.formatter -> 'a -> unit
type('good, 'bad)t =[ `Error of 'bad | `Ok of 'good ]
val return : 'a -> ('a, 'err) tval fail : 'err -> ('a, 'err) tval of_exn : exn -> ('a, string) tof_exn e uses Printexc to print the exception as a stringval 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.
Since 0.14
val fail_printf : ('a, Buffer.t, unit, ('a, string) t) Pervasives.format4 -> 'afail_printf format uses format to obtain an error message
    and then returns `Error msgval map : ('a -> 'b) -> ('a, 'err) t -> ('b, 'err) tval map_err : ('err1 -> 'err2) -> ('a, 'err1) t -> ('a, 'err2) tval map2 : ('a -> 'b) ->
       ('err1 -> 'err2) -> ('a, 'err1) t -> ('b, 'err2) tCCError.map, but also with a function that can transform
    the error message in case of failureval iter : ('a -> unit) -> ('a, 'b) t -> unitval get_exn : ('a, 'b) t -> 'ax from `Ok x, fails otherwise.
    You should be careful with this function, and favor other combinators
    whenever possible.Invalid_argument if the value is an error.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.
    This is useful for code that does not want to depend on the exact
    definition of ('a, 'b) t used, for instance once OCaml gets a
    standard Result.t type.val flat_map : ('a -> ('b, 'err) t) -> ('a, 'err) t -> ('b, 'err) t
val (>|=) : ('a, 'err) t -> ('a -> 'b) -> ('b, 'err) t
val (>>=) : ('a, 'err) t -> ('a -> ('b, 'err) t) -> ('b, 'err) t
val equal : ?err:'err equal ->
       'a equal -> ('a, 'err) t equal
val compare : ?err:'err ord -> 'a ord -> ('a, 'err) t ord
val fold : success:('a -> 'b) -> failure:('err -> 'b) -> ('a, 'err) t -> 'bfold ~success ~failure e opens e and, if e = `Ok x, returns
    success x, otherwise e = `Error s and it returns failure s.
The functions CCError.guard, CCError.wrap1, CCError.wrap2 and CCError.wrap3 now return
exceptions in case of failure,
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 eval guard_str : (unit -> 'a) -> ('a, string) t
val guard_str_trace : (unit -> 'a) -> ('a, string) tCCError.guard_str but uses CCError.of_exn_trace instead of CCError.of_exn so
    that the stack trace is printed.val wrap1 : ('a -> 'b) -> 'a -> ('b, exn) tCCError.guard but gives the function one argument.val wrap2 : ('a -> 'b -> 'c) -> 'a -> 'b -> ('c, exn) tCCError.guard but gives the function two arguments.val wrap3 : ('a -> 'b -> 'c -> 'd) -> 'a -> 'b -> 'c -> ('d, exn) tCCError.guard but gives the function three arguments.val pure : 'a -> ('a, 'err) tCCError.returnval (<*>) : ('a -> 'b, 'err) t -> ('a, 'err) t -> ('b, 'err) ta <*> 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.val join : (('a, 'err) t, 'err) t -> ('a, 'err) tjoin 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.val both : ('a, 'err) t -> ('b, 'err) t -> ('a * 'b, 'err) tboth 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..end
val map_l : ('a -> ('b, 'err) t) -> 'a list -> ('b list, 'err) t
val fold_l : ('b -> 'a -> ('b, 'err) t) -> 'b -> 'a list -> ('b, 'err) t
val fold_seq : ('b -> 'a -> ('b, 'err) t) ->
       'b -> 'a sequence -> ('b, 'err) tval choose : ('a, 'err) t list -> ('a, 'err list) tchoose l selects a member of l that is a `Ok _ value,
    or returns `Error l otherwise, where l is the list of errors.val retry : int -> (unit -> ('a, 'err) t) -> ('a, 'err list) tretry 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..end
module Traverse(M:MONAD):sig..end
val to_opt : ('a, 'b) t -> 'a option
val of_opt : 'a option -> ('a, string) t
val to_seq : ('a, 'b) t -> 'a sequenceval pp : 'a printer -> ('a, string) t printer
val pp' : 'a printer ->
       'e printer -> ('a, 'e) t printerval print : 'a formatter -> ('a, string) t formatter
val print' : 'a formatter ->
       'e formatter -> ('a, 'e) t formatter
One can register exception printers here, so they will be used by CCError.guard,
CCError.wrap1, etc. The printers should succeed (print) on exceptions they
can deal with, and re-raise the exception otherwise. For instance
if I register a printer for Not_found, it could look like:
CCError.register_printer
    (fun buf exn -> match exn with
      | Not_found -> Buffer.add_string buf "Not_found"
      | _ -> raise exn
    );;
val register_printer : exn printer -> unit