A pointer to the end of an Async_stream that can be used to extend the stream.

`module Deferred = Async_kernel__.Deferred1`
`type 'a t``= 'a Async_kernel__.Types.Tail.t```
`include sig ... end`
`val sexp_of_t : ('a ‑> Base.Sexp.t) ‑> 'a t ‑> Base.Sexp.t`
`val create : unit ‑> _ t`

`create ()` returns a new tail.

`val extend : 'a t ‑> 'a ‑> unit`

`extend t v` extends the stream, and will raise an exception if `t` has been closed.

`val close_exn : _ t ‑> unit`

`close_exn t` closes `t`. Subsequent calls to `close_exn` or `extend` will raise an exception.

`val close_if_open : _ t ‑> unit`

`close_if_open t` closes `t`, if it's not already closed. If `t` is already closed, then this is a no-op.

`val is_closed : _ t ‑> bool`

`is_closed t` returns true iff the stream `t` is closed.

`module Stream : sig ... end`
`val collect : 'a t ‑> 'a Stream.t`

`collect t` returns the stream starting at the current position of the tail, i.e. the stream consisting of all subsequent `extend`s.