Just throwing it out there, and not expecting anything to be done.
I remember in an old language Smalltalk what we call methods today were once upon a time called ... messages . Can you believe that? Messages to me scream out the word Stream in my mind. And the message causes a mutation on the consealed state.
Well Stream::hold
could be thought of as constructing a Cell where the message is the new state of the cell to take on after the current transaction. (After transaction to maintain consistency amongst all the snapshots
)
With a bit of imagination we can construct the following.
Stream::holdMutator(sa: Stream<(a:A)=>void>, a: A): MutCell<A>
Which mutates the state after the current transaction. (Maintains consistency between snapshots
in current transaction)
The benefit? Immediate performance boost for cells carry collection typed values.