NAME

Data::Stream - capability based stream model

CAPABILITIES

Common: (Next Reset Peek First Exhausted)

Next:
  $stream->next

Reset:
  $stream->reset

Peek: (Next)
  $stream->peek # defaulted

First: (Reset, Next)
  $stream->first # defaulted

Exhausted:
  $stream->exhausted

Exhausted::Peek: (Exhausted)
  $sream->exhausted # defaulted

Ready: (Next)
  $stream->ready
  $stream->next_if_ready # defaulted

MultiNext: (Next)
  $stream->next(Int $how_many); # defaulted

DISCUSSION AREAS

Can we consider certain things universal? Should peek always be permitted even though it can potentially retain a reference to a large/contended resource?

What are sensible capabilities for e.g. a socket stream?

Seeking, skipping ...

Composition of potentially inefficient defaults?

MultiNext may interfere with simple wrappers for next - can we deal with that somehow? (multi+around?)