type Stream.Events<id, e, a> = recursive either {
.end!,
.event(id, Stream.Event<e, a>) choice {
.next* => self,
},
}
A finite sequence of lifecycle and production events from a stream group.
Events from different streams are interleaved by readiness. For each ID,
.spawned! comes first, produced values remain in stream order, and
.ended result or .cancelled! terminates its lifecycle before that ID can
be reused.
After each event, the consumer must select .next. This acknowledges event
delivery, but streams are pulled eagerly: the first pull starts when a stream
is spawned, and a subsequent pull may start before the current event is
acknowledged. At most one pull is outstanding per stream.
Events may be dropped via auto-cleanup (if the items and errors are droppable),
but keep in mind that dropping does not cancel the backing streams in a group or
registry. The events will still be generated and consumed in the background.