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