Streams maintain the same functional reactive execution paradigm of spreadsheets and property bindings, but you can compose several of them into a new stream with complex conditional logic. You can use the streams as event propagators, and understand the program state as a series of successive updates every time a new event appears on the stream.
https://www.didierboelens.com/2018/08/reactive-programming-s...
A stream allows you to generalice the computation, not depending on the number of data items that were available when you defined the function; i.e. not different from a function with a loop.
Applications like AirTable and other modern outliners are exploring interfaces to model that kind of generalized data tables and relations with visual metaphors.