I think splitter should be: `(RowT) => (G, RowT)` where `G` is the group id type. Is that right? Then there is effectively a graph that is being used to only compute products where G values are equal, right?