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