sig
  type 'a sequence = ('-> unit) -> unit
  type 'a equal = '-> '-> bool
  type 'a ord = '-> '-> int
  type 'a printer = Buffer.t -> '-> unit
  type 'a formatter = Format.formatter -> '-> unit
  type ('good, 'bad) t = [ `Error of 'bad | `Ok of 'good ]
  val return : '-> ('a, 'err) CCError.t
  val fail : 'err -> ('a, 'err) CCError.t
  val of_exn : exn -> ('a, string) CCError.t
  val of_exn_trace : exn -> ('a, string) CCError.t
  val fail_printf :
    ('a, Buffer.t, unit, ('a, string) CCError.t) Pervasives.format4 -> 'a
  val map : ('-> 'b) -> ('a, 'err) CCError.t -> ('b, 'err) CCError.t
  val map_err :
    ('err1 -> 'err2) -> ('a, 'err1) CCError.t -> ('a, 'err2) CCError.t
  val map2 :
    ('-> 'b) ->
    ('err1 -> 'err2) -> ('a, 'err1) CCError.t -> ('b, 'err2) CCError.t
  val iter : ('-> unit) -> ('a, 'b) CCError.t -> unit
  val get_exn : ('a, 'b) CCError.t -> 'a
  val catch : ('a, 'err) CCError.t -> ok:('-> 'b) -> err:('err -> 'b) -> 'b
  val flat_map :
    ('-> ('b, 'err) CCError.t) ->
    ('a, 'err) CCError.t -> ('b, 'err) CCError.t
  val ( >|= ) : ('a, 'err) CCError.t -> ('-> 'b) -> ('b, 'err) CCError.t
  val ( >>= ) :
    ('a, 'err) CCError.t ->
    ('-> ('b, 'err) CCError.t) -> ('b, 'err) CCError.t
  val equal :
    ?err:'err CCError.equal ->
    'CCError.equal -> ('a, 'err) CCError.t CCError.equal
  val compare :
    ?err:'err CCError.ord ->
    'CCError.ord -> ('a, 'err) CCError.t CCError.ord
  val fold :
    success:('-> 'b) -> failure:('err -> 'b) -> ('a, 'err) CCError.t -> 'b
  val guard : (unit -> 'a) -> ('a, exn) CCError.t
  val guard_str : (unit -> 'a) -> ('a, string) CCError.t
  val guard_str_trace : (unit -> 'a) -> ('a, string) CCError.t
  val wrap1 : ('-> 'b) -> '-> ('b, exn) CCError.t
  val wrap2 : ('-> '-> 'c) -> '-> '-> ('c, exn) CCError.t
  val wrap3 : ('-> '-> '-> 'd) -> '-> '-> '-> ('d, exn) CCError.t
  val pure : '-> ('a, 'err) CCError.t
  val ( <*> ) :
    ('-> 'b, 'err) CCError.t ->
    ('a, 'err) CCError.t -> ('b, 'err) CCError.t
  val join : (('a, 'err) CCError.t, 'err) CCError.t -> ('a, 'err) CCError.t
  val both :
    ('a, 'err) CCError.t -> ('b, 'err) CCError.t -> ('a * 'b, 'err) CCError.t
  module Infix :
    sig
      val ( >|= ) :
        ('a, 'err) CCError.t -> ('-> 'b) -> ('b, 'err) CCError.t
      val ( >>= ) :
        ('a, 'err) CCError.t ->
        ('-> ('b, 'err) CCError.t) -> ('b, 'err) CCError.t
      val ( <*> ) :
        ('-> 'b, 'err) CCError.t ->
        ('a, 'err) CCError.t -> ('b, 'err) CCError.t
    end
  val map_l :
    ('-> ('b, 'err) CCError.t) -> 'a list -> ('b list, 'err) CCError.t
  val fold_l :
    ('-> '-> ('b, 'err) CCError.t) ->
    '-> 'a list -> ('b, 'err) CCError.t
  val fold_seq :
    ('-> '-> ('b, 'err) CCError.t) ->
    '-> 'CCError.sequence -> ('b, 'err) CCError.t
  val choose : ('a, 'err) CCError.t list -> ('a, 'err list) CCError.t
  val retry :
    int -> (unit -> ('a, 'err) CCError.t) -> ('a, 'err list) CCError.t
  module type MONAD =
    sig
      type 'a t
      val return : '-> 'CCError.MONAD.t
      val ( >>= ) :
        'CCError.MONAD.t ->
        ('-> 'CCError.MONAD.t) -> 'CCError.MONAD.t
    end
  module Traverse :
    functor (M : MONAD->
      sig
        val sequence_m : ('M.t, 'err) CCError.t -> ('a, 'err) CCError.t M.t
        val fold_m :
          ('-> '-> 'M.t) -> '-> ('a, 'err) CCError.t -> 'M.t
        val map_m :
          ('-> 'M.t) -> ('a, 'err) CCError.t -> ('b, 'err) CCError.t M.t
        val retry_m :
          int ->
          (unit -> ('a, 'err) CCError.t M.t) -> ('a, 'err list) CCError.t M.t
      end
  val to_opt : ('a, 'b) CCError.t -> 'a option
  val of_opt : 'a option -> ('a, string) CCError.t
  val to_seq : ('a, 'b) CCError.t -> 'CCError.sequence
  val pp : 'CCError.printer -> ('a, string) CCError.t CCError.printer
  val pp' :
    'CCError.printer ->
    'CCError.printer -> ('a, 'e) CCError.t CCError.printer
  val print :
    'CCError.formatter -> ('a, string) CCError.t CCError.formatter
  val print' :
    'CCError.formatter ->
    'CCError.formatter -> ('a, 'e) CCError.t CCError.formatter
  val register_printer : exn CCError.printer -> unit
end