sig
  type 'a t = 'a option
  val map : ('a -> 'b) -> 'a CCOpt.t -> 'b CCOpt.t
  val map_or : default:'b -> ('a -> 'b) -> 'a CCOpt.t -> 'b
  val map_lazy : (unit -> 'b) -> ('a -> 'b) -> 'a CCOpt.t -> 'b
  val is_some : 'a CCOpt.t -> bool
  val is_none : 'a CCOpt.t -> bool
  val compare : ('a -> 'a -> int) -> 'a CCOpt.t -> 'a CCOpt.t -> int
  val equal : ('a -> 'a -> bool) -> 'a CCOpt.t -> 'a CCOpt.t -> bool
  val return : 'a -> 'a CCOpt.t
  val ( >|= ) : 'a CCOpt.t -> ('a -> 'b) -> 'b CCOpt.t
  val ( >>= ) : 'a CCOpt.t -> ('a -> 'b CCOpt.t) -> 'b CCOpt.t
  val flat_map : ('a -> 'b CCOpt.t) -> 'a CCOpt.t -> 'b CCOpt.t
  val map2 : ('a -> 'b -> 'c) -> 'a CCOpt.t -> 'b CCOpt.t -> 'c CCOpt.t
  val iter : ('a -> unit) -> 'a CCOpt.t -> unit
  val fold : ('a -> 'b -> 'a) -> 'a -> 'b CCOpt.t -> 'a
  val filter : ('a -> bool) -> 'a CCOpt.t -> 'a CCOpt.t
  val if_ : ('a -> bool) -> 'a -> 'a option
  val exists : ('a -> bool) -> 'a CCOpt.t -> bool
  val for_all : ('a -> bool) -> 'a CCOpt.t -> bool
  val get_or : default:'a -> 'a CCOpt.t -> 'a
  val get_exn : 'a CCOpt.t -> 'a
  val get_lazy : (unit -> 'a) -> 'a CCOpt.t -> 'a
  val sequence_l : 'a CCOpt.t list -> 'a list CCOpt.t
  val wrap : ?handler:(exn -> bool) -> ('a -> 'b) -> 'a -> 'b option
  val wrap2 :
    ?handler:(exn -> bool) -> ('a -> 'b -> 'c) -> 'a -> 'b -> 'c option
  val pure : 'a -> 'a CCOpt.t
  val ( <*> ) : ('a -> 'b) CCOpt.t -> 'a CCOpt.t -> 'b CCOpt.t
  val ( <$> ) : ('a -> 'b) -> 'a CCOpt.t -> 'b CCOpt.t
  val or_ : else_:'a CCOpt.t -> 'a CCOpt.t -> 'a CCOpt.t
  val or_lazy : else_:(unit -> 'a CCOpt.t) -> 'a CCOpt.t -> 'a CCOpt.t
  val ( <+> ) : 'a CCOpt.t -> 'a CCOpt.t -> 'a CCOpt.t
  val choice : 'a CCOpt.t list -> 'a CCOpt.t
  module Infix :
    sig
      val ( >|= ) : 'a CCOpt.t -> ('a -> 'b) -> 'b CCOpt.t
      val ( >>= ) : 'a CCOpt.t -> ('a -> 'b CCOpt.t) -> 'b CCOpt.t
      val ( <*> ) : ('a -> 'b) CCOpt.t -> 'a CCOpt.t -> 'b CCOpt.t
      val ( <$> ) : ('a -> 'b) -> 'a CCOpt.t -> 'b CCOpt.t
      val ( <+> ) : 'a CCOpt.t -> 'a CCOpt.t -> 'a CCOpt.t
    end
  val to_list : 'a CCOpt.t -> 'a list
  val of_list : 'a list -> 'a CCOpt.t
  val to_result : 'e -> 'a CCOpt.t -> ('a, 'e) Result.result
  val to_result_lazy : (unit -> 'e) -> 'a CCOpt.t -> ('a, 'e) Result.result
  val of_result : ('a, 'b) Result.result -> 'a CCOpt.t
  type 'a sequence = ('a -> unit) -> unit
  type 'a gen = unit -> 'a option
  type 'a printer = Format.formatter -> 'a -> unit
  type 'a random_gen = Random.State.t -> 'a
  val random : 'a CCOpt.random_gen -> 'a CCOpt.t CCOpt.random_gen
  val choice_seq : 'a CCOpt.t CCOpt.sequence -> 'a CCOpt.t
  val to_gen : 'a CCOpt.t -> 'a CCOpt.gen
  val to_seq : 'a CCOpt.t -> 'a CCOpt.sequence
  val pp : 'a CCOpt.printer -> 'a CCOpt.t CCOpt.printer
end