sig
  val iter :
    Writer0.t ->
    id:(([< `Read | `Set_and_create ], Writer0.t, Writer0.Id.t)
        Fieldslib.Field.t_with_perm -> Writer0.t -> Writer0.Id.t -> 'a) ->
    fd:(([< `Read | `Set_and_create ], Writer0.t, Fd.t)
        Fieldslib.Field.t_with_perm -> Writer0.t -> Fd.t -> 'b) ->
    monitor:(([< `Read | `Set_and_create ], Writer0.t, Import.Monitor.t)
             Fieldslib.Field.t_with_perm ->
             Writer0.t -> Import.Monitor.t -> 'c) ->
    background_writer_state:(([< `Read | `Set_and_create ], Writer0.t,
                              [ `Not_running
                              | `Running
                              | `Stopped_permanently ])
                             Fieldslib.Field.t_with_perm ->
                             Writer0.t ->
                             [ `Not_running | `Running | `Stopped_permanently ] ->
                             'd) ->
    syscall:(([< `Read | `Set_and_create ], Writer0.t,
              [ `Per_cycle | `Periodic of Core.Std.Time.Span.t ])
             Fieldslib.Field.t_with_perm ->
             Writer0.t ->
             [ `Per_cycle | `Periodic of Core.Std.Time.Span.t ] -> 'e) ->
    bytes_received:(([< `Read | `Set_and_create ], Writer0.t,
                     Core.Std.Int63.t)
                    Fieldslib.Field.t_with_perm ->
                    Writer0.t -> Core.Std.Int63.t -> 'f) ->
    bytes_written:(([< `Read | `Set_and_create ], Writer0.t,
                    Core.Std.Int63.t)
                   Fieldslib.Field.t_with_perm ->
                   Writer0.t -> Core.Std.Int63.t -> 'g) ->
    scheduled:(([< `Read | `Set_and_create ], Writer0.t,
                (Core.Std.Bigstring.t Writer0.IOVec.t * [ `Destroy | `Keep ])
                Core.Std.Queue.t Core.Std.sexp_opaque)
               Fieldslib.Field.t_with_perm ->
               Writer0.t ->
               (Core.Std.Bigstring.t Writer0.IOVec.t * [ `Destroy | `Keep ])
               Core.Std.Queue.t Core.Std.sexp_opaque -> 'h) ->
    scheduled_bytes:(([< `Read | `Set_and_create ], Writer0.t, int)
                     Fieldslib.Field.t_with_perm -> Writer0.t -> int -> 'i) ->
    buf:(([< `Read | `Set_and_create ], Writer0.t,
          Core.Std.Bigstring.t Core.Std.sexp_opaque)
         Fieldslib.Field.t_with_perm ->
         Writer0.t -> Core.Std.Bigstring.t Core.Std.sexp_opaque -> 'j) ->
    scheduled_back:(([< `Read | `Set_and_create ], Writer0.t, int)
                    Fieldslib.Field.t_with_perm -> Writer0.t -> int -> 'k) ->
    back:(([< `Read | `Set_and_create ], Writer0.t, int)
          Fieldslib.Field.t_with_perm -> Writer0.t -> int -> 'l) ->
    flushes:(([< `Read | `Set_and_create ], Writer0.t,
              (Core.Std.Time.t Import.Ivar.t * Core.Std.Int63.t)
              Core.Std.Queue.t Core.Std.sexp_opaque)
             Fieldslib.Field.t_with_perm ->
             Writer0.t ->
             (Core.Std.Time.t Import.Ivar.t * Core.Std.Int63.t)
             Core.Std.Queue.t Core.Std.sexp_opaque -> 'm) ->
    close_state:(([< `Read | `Set_and_create ], Writer0.t,
                  [ `Closed | `Closed_and_flushing | `Open ])
                 Fieldslib.Field.t_with_perm ->
                 Writer0.t ->
                 [ `Closed | `Closed_and_flushing | `Open ] -> 'n) ->
    close_finished:(([< `Read | `Set_and_create ], Writer0.t,
                     unit Import.Ivar.t)
                    Fieldslib.Field.t_with_perm ->
                    Writer0.t -> unit Import.Ivar.t -> 'o) ->
    producers_to_flush_at_close:(([< `Read | `Set_and_create ], Writer0.t,
                                  (unit -> unit Import.Deferred.t)
                                  Core.Std.Bag.t)
                                 Fieldslib.Field.t_with_perm ->
                                 Writer0.t ->
                                 (unit -> unit Import.Deferred.t)
                                 Core.Std.Bag.t -> 'p) ->
    flush_at_shutdown_elt:(([< `Read | `Set_and_create ], Writer0.t,
                            Writer0.t Core.Std.sexp_opaque Core.Std.Bag.Elt.t
                            option)
                           Fieldslib.Field.t_with_perm ->
                           Writer0.t ->
                           Writer0.t Core.Std.sexp_opaque Core.Std.Bag.Elt.t
                           option -> 'q) ->
    check_buffer_age:(([< `Read | `Set_and_create ], Writer0.t,
                       Writer0.t Core.Std.sexp_opaque
                       Writer0.Check_buffer_age'.t Core.Std.Bag.Elt.t option)
                      Fieldslib.Field.t_with_perm ->
                      Writer0.t ->
                      Writer0.t Core.Std.sexp_opaque
                      Writer0.Check_buffer_age'.t Core.Std.Bag.Elt.t option ->
                      'r) ->
    consumer_left:(([< `Read | `Set_and_create ], Writer0.t,
                    unit Import.Ivar.t)
                   Fieldslib.Field.t_with_perm ->
                   Writer0.t -> unit Import.Ivar.t -> 's) ->
    raise_when_consumer_leaves:(([< `Read | `Set_and_create ], Writer0.t,
                                 bool)
                                Fieldslib.Field.t_with_perm ->
                                Writer0.t -> bool -> 't) ->
    open_flags:(([< `Read | `Set_and_create ], Writer0.t,
                 Writer0.open_flags Import.Deferred.t)
                Fieldslib.Field.t_with_perm ->
                Writer0.t -> Writer0.open_flags Import.Deferred.t -> 'u) ->
    'u
  val fold :
    Writer0.t ->
    init:'->
    id:('->
        ([< `Read | `Set_and_create ], Writer0.t, Writer0.Id.t)
        Fieldslib.Field.t_with_perm -> Writer0.t -> Writer0.Id.t -> 'b) ->
    fd:('->
        ([< `Read | `Set_and_create ], Writer0.t, Fd.t)
        Fieldslib.Field.t_with_perm -> Writer0.t -> Fd.t -> 'c) ->
    monitor:('->
             ([< `Read | `Set_and_create ], Writer0.t, Import.Monitor.t)
             Fieldslib.Field.t_with_perm ->
             Writer0.t -> Import.Monitor.t -> 'd) ->
    background_writer_state:('->
                             ([< `Read | `Set_and_create ], Writer0.t,
                              [ `Not_running
                              | `Running
                              | `Stopped_permanently ])
                             Fieldslib.Field.t_with_perm ->
                             Writer0.t ->
                             [ `Not_running | `Running | `Stopped_permanently ] ->
                             'e) ->
    syscall:('->
             ([< `Read | `Set_and_create ], Writer0.t,
              [ `Per_cycle | `Periodic of Core.Std.Time.Span.t ])
             Fieldslib.Field.t_with_perm ->
             Writer0.t ->
             [ `Per_cycle | `Periodic of Core.Std.Time.Span.t ] -> 'f) ->
    bytes_received:('->
                    ([< `Read | `Set_and_create ], Writer0.t,
                     Core.Std.Int63.t)
                    Fieldslib.Field.t_with_perm ->
                    Writer0.t -> Core.Std.Int63.t -> 'g) ->
    bytes_written:('->
                   ([< `Read | `Set_and_create ], Writer0.t,
                    Core.Std.Int63.t)
                   Fieldslib.Field.t_with_perm ->
                   Writer0.t -> Core.Std.Int63.t -> 'h) ->
    scheduled:('->
               ([< `Read | `Set_and_create ], Writer0.t,
                (Core.Std.Bigstring.t Writer0.IOVec.t * [ `Destroy | `Keep ])
                Core.Std.Queue.t Core.Std.sexp_opaque)
               Fieldslib.Field.t_with_perm ->
               Writer0.t ->
               (Core.Std.Bigstring.t Writer0.IOVec.t * [ `Destroy | `Keep ])
               Core.Std.Queue.t Core.Std.sexp_opaque -> 'i) ->
    scheduled_bytes:('->
                     ([< `Read | `Set_and_create ], Writer0.t, int)
                     Fieldslib.Field.t_with_perm -> Writer0.t -> int -> 'j) ->
    buf:('->
         ([< `Read | `Set_and_create ], Writer0.t,
          Core.Std.Bigstring.t Core.Std.sexp_opaque)
         Fieldslib.Field.t_with_perm ->
         Writer0.t -> Core.Std.Bigstring.t Core.Std.sexp_opaque -> 'k) ->
    scheduled_back:('->
                    ([< `Read | `Set_and_create ], Writer0.t, int)
                    Fieldslib.Field.t_with_perm -> Writer0.t -> int -> 'l) ->
    back:('->
          ([< `Read | `Set_and_create ], Writer0.t, int)
          Fieldslib.Field.t_with_perm -> Writer0.t -> int -> 'm) ->
    flushes:('->
             ([< `Read | `Set_and_create ], Writer0.t,
              (Core.Std.Time.t Import.Ivar.t * Core.Std.Int63.t)
              Core.Std.Queue.t Core.Std.sexp_opaque)
             Fieldslib.Field.t_with_perm ->
             Writer0.t ->
             (Core.Std.Time.t Import.Ivar.t * Core.Std.Int63.t)
             Core.Std.Queue.t Core.Std.sexp_opaque -> 'n) ->
    close_state:('->
                 ([< `Read | `Set_and_create ], Writer0.t,
                  [ `Closed | `Closed_and_flushing | `Open ])
                 Fieldslib.Field.t_with_perm ->
                 Writer0.t ->
                 [ `Closed | `Closed_and_flushing | `Open ] -> 'o) ->
    close_finished:('->
                    ([< `Read | `Set_and_create ], Writer0.t,
                     unit Import.Ivar.t)
                    Fieldslib.Field.t_with_perm ->
                    Writer0.t -> unit Import.Ivar.t -> 'p) ->
    producers_to_flush_at_close:('->
                                 ([< `Read | `Set_and_create ], Writer0.t,
                                  (unit -> unit Import.Deferred.t)
                                  Core.Std.Bag.t)
                                 Fieldslib.Field.t_with_perm ->
                                 Writer0.t ->
                                 (unit -> unit Import.Deferred.t)
                                 Core.Std.Bag.t -> 'q) ->
    flush_at_shutdown_elt:('->
                           ([< `Read | `Set_and_create ], Writer0.t,
                            Writer0.t Core.Std.sexp_opaque Core.Std.Bag.Elt.t
                            option)
                           Fieldslib.Field.t_with_perm ->
                           Writer0.t ->
                           Writer0.t Core.Std.sexp_opaque Core.Std.Bag.Elt.t
                           option -> 'r) ->
    check_buffer_age:('->
                      ([< `Read | `Set_and_create ], Writer0.t,
                       Writer0.t Core.Std.sexp_opaque
                       Writer0.Check_buffer_age'.t Core.Std.Bag.Elt.t option)
                      Fieldslib.Field.t_with_perm ->
                      Writer0.t ->
                      Writer0.t Core.Std.sexp_opaque
                      Writer0.Check_buffer_age'.t Core.Std.Bag.Elt.t option ->
                      's) ->
    consumer_left:('->
                   ([< `Read | `Set_and_create ], Writer0.t,
                    unit Import.Ivar.t)
                   Fieldslib.Field.t_with_perm ->
                   Writer0.t -> unit Import.Ivar.t -> 't) ->
    raise_when_consumer_leaves:('->
                                ([< `Read | `Set_and_create ], Writer0.t,
                                 bool)
                                Fieldslib.Field.t_with_perm ->
                                Writer0.t -> bool -> 'u) ->
    open_flags:('->
                ([< `Read | `Set_and_create ], Writer0.t,
                 Writer0.open_flags Import.Deferred.t)
                Fieldslib.Field.t_with_perm ->
                Writer0.t -> Writer0.open_flags Import.Deferred.t -> 'v) ->
    'v
end