comes in handy now, since IterStateWrapper uses a similar API
The idea is to avoid building a data structure for intermediary results, while still being able to process a variably sized and arbitrary shaped set of source data