module Async_stream:For most applications one should usesig..end
Pipe instead of Stream.
A stream is an immutable sequence of values, with a possibly incomplete tail that may be extended asynchronously.
    The basic primitive operation for getting the next element out of stream is
    Stream.next, which (asynchronously) returns the element and the rest of the stream.
type'at =('a, Execution_context.t) Raw_stream.t
val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.tsexp_of_t t f returns a sexp of all of the elements currently available in the
    stream.  It is just for display purposes.  There is no t_of_sexp.val create : ('a Tail.t -> unit) -> 'a tcreate f returns a stream t and calls f tail, where the elements of the stream
    are determined as the tail is extended, and the end of the stream is reached when the
    tail is closed.type ('a, 'execution_context) next_ = | | | Nil | 
| | | Cons of  | 
next t returns a deferred that will become determined when the next part of the
    stream is determined.  This is Cons (v, t'), where v is the next element of the
    stream and t' is the rest of the stream, or with Nil at the end of the stream.type'anext =('a, Execution_context.t) next_
val next : 'a t -> 'a next Deferred.tval first_exn : 'a t -> 'a Deferred.tfirst_exn t returns a deferred that becomes determined with the first element of
    t.val of_list : 'a list -> 'a tof_list l returns a stream with the elements of list l.val to_list : 'a t -> 'a list Deferred.tto_list t returns a deferred that will become determined with the list
   of elements in t, if the end of t is reached.val of_fun : (unit -> 'a Deferred.t) -> 'a tof_fun f returns a stream whose elements are determined by calling f forever.val copy_to_tail : 'a t -> 'a Tail.t -> unit Deferred.tcopy_to_tail t tail reads elements from t and puts them in tail, until
    the end of t is reached.append, fold, iter, map, filter_map, take
There are also deferred variants:
iter', map', filter_map'
    These take anonymous functions that return deferreds generalizing the usual sequence
    operation and allowing the client to control the rate at which the sequence is
    processed.
val append : 'a t -> 'a t -> 'a tappend t1 t2 returns a stream with all the values of t1, in order, and if t1 ends,
    these values are followed by all the values of t2.val concat : 'a t t -> 'a tconcat t takes a stream of streams and produces a stream that is the concatenation
    of each stream in order (you see all of stream 1, then all of stream 2... etc.)val available_now : 'a t -> 'a list * 'a tavailable_now t returns t prefix of t that is available now, along with the rest of
    the stream.val filter' : 'a t -> f:('a -> bool Deferred.t) -> 'a tfilter' s ~f returns a stream with one element, v, for each v in s such with f v =
    true.val filter : 'a t -> f:('a -> bool) -> 'a tfilter s ~f returns a stream with one element, v, for each v in s such with f v =
    true.val filter_map' : 'a t -> f:('a -> 'b option Deferred.t) -> 'b tfilter_map' s ~f returns a stream with one element, v', for each v in s such with f
    v = Some v'.val filter_map : 'a t -> f:('a -> 'b option) -> 'b tfilter_map s ~f returns a stream with one element, v', for each v in s such with f v
    = Some v'.val fold' : 'a t ->
       init:'b -> f:('b -> 'a -> 'b Deferred.t) -> 'b Deferred.tfold' t ~init ~f is like list fold, walking over the elements of the stream in
    order, as they become available.  fold' returns a deferred that will yield the final
    value of the accumulator, if the end of the stream is reached.val fold : 'a t -> init:'b -> f:('b -> 'a -> 'b) -> 'b Deferred.tfold t ~init ~f is a variant of fold' in which f does not return a deferred.val iter' : 'a t -> f:('a -> unit Deferred.t) -> unit Deferred.titer' t ~f applies f to each element of the stream in turn, as they become
    available.  It continues onto the next element only after the deferred returned by f
    becomes determined.val closed : 'a t -> unit Deferred.tclosed t returns a deferred that becomes determined when the end of t is
    reached.val iter : 'a t -> f:('a -> unit) -> unititer t ~f = whenever (iter' t ~f:(fun a -> f a; Deferred.unit))val take_until : 'a t -> unit Deferred.t -> 'a ttake_until t d returns a stream t' that has the same elements as t up until d
    becomes determined.iter_durably' t ~f is like iter' t ~f, except if f raises an exception it
    continues with the next element of the stream *and* reraises the exception (to the
    monitor in scope when iter_durably was called).iter_durably t ~f is like iter t ~f, except if f raises an exception it
    continues with the next element of the stream *and* reraises the exception (to the
    monitor in scope when iter_durably was called).val iter_durably' : 'a t -> f:('a -> unit Deferred.t) -> unit Deferred.titer_durably_report_end t ~f is equivalent to iter_durably' t ~f:(fun x -> return
    (f x)) but it is more efficientval iter_durably : 'a t -> f:('a -> unit) -> unitval iter_durably_report_end : 'a t -> f:('a -> unit) -> unit Deferred.tval length : 'a t -> int Deferred.tlength s returns a deferred that is determined when the end of s is reached, taking
    the value of the number of elements in sval map' : 'a t -> f:('a -> 'b Deferred.t) -> 'b tmap' t f creates a new stream that with one element, (f v), for each element v of
    t.val map : 'a t -> f:('a -> 'b) -> 'b tmap t ~f creates a new stream that with one element, (f v), for each element v of t.
    map t f = map' t ~f:(fun a -> return (f a)).val first_n : 'a t -> int -> 'a tfirst_n t n returns a stream with the first n elements of t, if t has n or more
    elements, or it returns t.val unfold : 'b -> f:('b -> ('a * 'b) option Deferred.t) -> 'a tunfold b f returns a stream a1; a2; ...; an whose elements are
    determined by the equations:
      b0 = b
      Some (a1, b1) = f b0
      Some (a2, b2) = f b1
      ...
      None = f bnval split : ?stop:unit Deferred.t ->
       ?f:('a -> [ `Continue | `Found of 'b ]) ->
       'a t ->
       'a t *
       [ `End_of_stream
       | `Found of 'b * 'a t
       | `Stopped of 'a t ] Deferred.tsplit ~stop ~f t returns a pair (p, d), where p is a prefix of t that ends
   for one of three reasons:
   1. t ends
   2. stop becomes determined
   3. f returns `Found
   The deferred d describes why the prefix ended, and returns the suffix of the
   stream in case (2) or (3).val find : 'a t ->
       f:('a -> bool) ->
       [ `End_of_stream | `Found of 'a * 'a t ] Deferred.tfind ~f t returns a deferred that becomes determined when f x is true for some
    element of t, or if the end of the stream is reachedval ungroup : 'a list t -> 'a tungroup t takes a stream of lists and unpacks the items from each list into a single
    streamval interleave : 'a t t -> 'a tinterleave list takes a stream of streams and returns a stream of their items
    interleaved as they become determined. The interleaved stream will be closed when the
    outer stream and all of the inner streams have been closed.