sig
  type ('a, 'b) t = ('a, 'b) Cf_flow.cell Lazy.t
  and ('a, 'b) cell =
      P of 'b * ('a, 'b) Cf_flow.t
    | Q of ('a -> ('a, 'b) Cf_flow.cell)
    | Z
  val nil : ('a, 'b) Cf_flow.t
  val nop : ('a, 'a) Cf_flow.t
  val filter : ('a -> bool) -> ('a, 'a) Cf_flow.t
  val map : ('a -> 'b) -> ('a, 'b) Cf_flow.t
  val optmap : ('a -> 'b option) -> ('a, 'b) Cf_flow.t
  val listmap : ('a -> 'b list) -> ('a, 'b) Cf_flow.t
  val seqmap : ('a -> 'b Cf_seq.t) -> ('a, 'b) Cf_flow.t
  val broadcast : ('a, 'b) Cf_flow.t list -> ('a, 'b) Cf_flow.t
  val mapstate : ('a -> 'b -> 'a * 'c) -> 'a -> ('b, 'c) Cf_flow.t
  val machine :
    ('a -> 'b -> ('a * 'c Cf_seq.t) option) -> 'a -> ('b, 'c) Cf_flow.t
  module Op :
    sig
      val ( -*- ) :
        ('a, 'b) Cf_flow.t -> ('a, 'b) Cf_flow.t -> ('a, 'b) Cf_flow.t
      val ( -=- ) :
        ('a, 'b) Cf_flow.t -> ('b, 'c) Cf_flow.t -> ('a, 'c) Cf_flow.t
      val ( -&- ) :
        ('a, 'b) Cf_flow.t -> ('a, 'b) Cf_flow.t -> ('a, 'b) Cf_flow.t
      val ( -+- ) :
        ('a, 'b) Cf_flow.t ->
        ('c, 'd) Cf_flow.t ->
        (('a, 'c) Cf_either.t, ('b, 'd) Cf_either.t) Cf_flow.t
      val ( ~@ ) : ('a, 'a) Cf_flow.t -> ('a, 'a) Cf_flow.t
      val ( ~@< ) :
        (('a, 'b) Cf_either.t, ('a, 'c) Cf_either.t) Cf_flow.t ->
        ('b, 'c) Cf_flow.t
      val ( -@- ) :
        (('a, 'b) Cf_either.t, ('c, 'd) Cf_either.t) Cf_flow.t ->
        ('c, 'a) Cf_flow.t -> ('b, 'd) Cf_flow.t
    end
  val to_seq : (unit, 'a) Cf_flow.t -> 'a Cf_seq.t
  val of_seq : 'a Cf_seq.t -> ('b, 'a) Cf_flow.t
  val upcase : (char, char) Cf_flow.t
  val dncase : (char, char) Cf_flow.t
  val commute : ('a, 'b) Cf_flow.t -> 'a Cf_seq.t -> 'b Cf_seq.t
  val commute_string : (char, char) Cf_flow.t -> string -> string
  val drain : ('a, 'b) Cf_flow.t -> 'b Cf_seq.t
  val flush : ('a, 'b) Cf_flow.t -> ('a, 'b) Cf_flow.t
  val ingestor : ('a Cf_seq.t option, 'a) Cf_flow.t
  val transcode :
    ('a Cf_seq.t option, 'b) Cf_flow.t -> 'a Cf_seq.t -> 'b Cf_seq.t
  module Transcode :
    sig
      val more :
        ('a Cf_seq.t option, 'b) Cf_flow.t ->
        'a Cf_seq.t -> 'b Cf_seq.t * ('a Cf_seq.t option, 'b) Cf_flow.t
      val last : ('a Cf_seq.t option, 'b) Cf_flow.t -> 'b Cf_seq.t
    end
  val readC : (('a, 'b) Cf_flow.t, 'a) Cf_cmonad.t
  val writeC : 'a -> (('b, 'a) Cf_flow.t, unit) Cf_cmonad.t
  val evalC : (('a, 'b) Cf_flow.t, unit) Cf_cmonad.t -> ('a, 'b) Cf_flow.t
  val readSC : ('a, ('b, 'c) Cf_flow.t, 'b) Cf_scmonad.t
  val writeSC : 'a -> ('b, ('c, 'a) Cf_flow.t, unit) Cf_scmonad.t
  val evalSC :
    ('a, ('b, 'c) Cf_flow.t, unit) Cf_scmonad.t -> 'a -> ('b, 'c) Cf_flow.t
end