sig
  type 'a t
  type 'a io = 'CCMonadIO.t
  type 'a with_finalizer
  type 'a or_error = [ `Error of string | `Ok of 'a ]
  val ( >>= ) : 'CCMonadIO.t -> ('-> 'CCMonadIO.t) -> 'CCMonadIO.t
  val return : '-> 'CCMonadIO.t
  val repeat : int -> 'CCMonadIO.t -> 'a list CCMonadIO.t
  val repeat' : int -> 'CCMonadIO.t -> unit CCMonadIO.t
  val map : ('-> 'b) -> 'CCMonadIO.t -> 'CCMonadIO.t
  val ( >|= ) : 'CCMonadIO.t -> ('-> 'b) -> 'CCMonadIO.t
  val bind :
    ?finalize:unit CCMonadIO.t ->
    ('-> 'CCMonadIO.t) -> 'CCMonadIO.t -> 'CCMonadIO.t
  val pure : '-> 'CCMonadIO.t
  val ( <*> ) : ('-> 'b) CCMonadIO.t -> 'CCMonadIO.t -> 'CCMonadIO.t
  val lift : ('-> 'b) -> 'CCMonadIO.t -> 'CCMonadIO.t
  val lift2 :
    ('-> '-> 'c) -> 'CCMonadIO.t -> 'CCMonadIO.t -> 'CCMonadIO.t
  val lift3 :
    ('-> '-> '-> 'd) ->
    'CCMonadIO.t -> 'CCMonadIO.t -> 'CCMonadIO.t -> 'CCMonadIO.t
  val sequence : 'CCMonadIO.t list -> 'a list CCMonadIO.t
  val sequence_map : ('-> 'CCMonadIO.t) -> 'a list -> 'b list CCMonadIO.t
  val fail : string -> 'CCMonadIO.t
  val ( >>>= ) :
    'CCMonadIO.with_finalizer -> ('-> 'CCMonadIO.t) -> 'CCMonadIO.t
  val run : 'CCMonadIO.t -> 'CCMonadIO.or_error
  exception IO_error of string
  val run_exn : 'CCMonadIO.t -> 'a
  val register_printer : (exn -> string option) -> unit
  val with_in :
    ?mode:int ->
    ?flags:Pervasives.open_flag list ->
    string -> Pervasives.in_channel CCMonadIO.with_finalizer
  val read :
    Pervasives.in_channel -> Bytes.t -> int -> int -> int CCMonadIO.t
  val read_line : Pervasives.in_channel -> string option CCMonadIO.t
  val read_lines : Pervasives.in_channel -> string list CCMonadIO.t
  val read_all : Pervasives.in_channel -> string CCMonadIO.t
  val with_out :
    ?mode:int ->
    ?flags:Pervasives.open_flag list ->
    string -> Pervasives.out_channel CCMonadIO.with_finalizer
  val with_out_a :
    ?mode:int ->
    ?flags:Pervasives.open_flag list ->
    string -> Pervasives.out_channel CCMonadIO.with_finalizer
  val write :
    Pervasives.out_channel -> string -> int -> int -> unit CCMonadIO.t
  val write_str : Pervasives.out_channel -> string -> unit CCMonadIO.t
  val write_buf : Pervasives.out_channel -> Buffer.t -> unit CCMonadIO.t
  val write_line : Pervasives.out_channel -> string -> unit CCMonadIO.t
  val flush : Pervasives.out_channel -> unit CCMonadIO.t
  module Seq :
    sig
      type 'a t
      val map :
        ('-> 'CCMonadIO.io) -> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val map_pure : ('-> 'b) -> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val filter_map :
        ('-> 'b option) -> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val filter : ('-> bool) -> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val flat_map :
        ('-> 'CCMonadIO.Seq.t CCMonadIO.io) ->
        'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val take : int -> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val drop : int -> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val take_while :
        ('-> bool CCMonadIO.io) -> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val drop_while :
        ('-> bool CCMonadIO.io) -> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val general_iter :
        ('-> '-> [ `Continue of 'b * 'c option | `Stop ] CCMonadIO.io) ->
        '-> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val tee :
        ('-> unit CCMonadIO.io) list ->
        'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val iter :
        ('-> 'CCMonadIO.io) -> 'CCMonadIO.Seq.t -> unit CCMonadIO.io
      val length : 'CCMonadIO.Seq.t -> int CCMonadIO.io
      val fold :
        ('-> '-> 'CCMonadIO.io) ->
        '-> 'CCMonadIO.Seq.t -> 'CCMonadIO.io
      val fold_pure :
        ('-> '-> 'b) -> '-> 'CCMonadIO.Seq.t -> 'CCMonadIO.io
      type 'a step_result = Yield of '| Stop
      type 'a gen = unit -> 'CCMonadIO.Seq.step_result CCMonadIO.io
      val of_fun : 'CCMonadIO.Seq.gen -> 'CCMonadIO.Seq.t
      val empty : 'CCMonadIO.Seq.t
      val singleton : '-> 'CCMonadIO.Seq.t
      val cons : '-> 'CCMonadIO.Seq.t -> 'CCMonadIO.Seq.t
      val of_list : 'a list -> 'CCMonadIO.Seq.t
      val of_array : 'a array -> 'CCMonadIO.Seq.t
      val chunks :
        size:int -> Pervasives.in_channel -> string CCMonadIO.Seq.t
      val lines : Pervasives.in_channel -> string CCMonadIO.Seq.t
      val words : string CCMonadIO.Seq.t -> string CCMonadIO.Seq.t
      val output :
        ?sep:string ->
        Pervasives.out_channel -> string CCMonadIO.Seq.t -> unit CCMonadIO.io
    end
  module File :
    sig
      type t = string
      val to_string : CCMonadIO.File.t -> string
      val make : string -> CCMonadIO.File.t
      val exists : CCMonadIO.File.t -> bool CCMonadIO.io
      val is_directory : CCMonadIO.File.t -> bool CCMonadIO.io
      val remove : CCMonadIO.File.t -> unit CCMonadIO.io
      val read_dir :
        ?recurse:bool ->
        CCMonadIO.File.t -> CCMonadIO.File.t CCMonadIO.Seq.t CCMonadIO.io
      val walk :
        CCMonadIO.File.t ->
        ([ `Dir | `File ] * CCMonadIO.File.t) CCMonadIO.Seq.t CCMonadIO.io
    end
  module Raw : sig val wrap : (unit -> 'a) -> 'CCMonadIO.t end
end