pub type RowRowSpine<T, R> = Spine<Rc<OrdValBatch<RowRowLayout<((Row, Row), T, R)>>>, ColumnatedMergeBatcher<Row, Row, T, R>, RcBuilder<OrdValBuilder<RowRowLayout<((Row, Row), T, R)>>>>;
struct RowRowSpine<T, R> {
operator: OperatorInfo,
logger: Option<Logger<DifferentialEvent, usize>>,
logical_frontier: Antichain<<Rc<OrdValBatch<RowRowLayout<((Row, Row), T, R)>>> as BatchReader>::Time>,
physical_frontier: Antichain<<Rc<OrdValBatch<RowRowLayout<((Row, Row), T, R)>>> as BatchReader>::Time>,
merging: Vec<MergeState<Rc<OrdValBatch<RowRowLayout<((Row, Row), T, R)>>>>>,
pending: Vec<Rc<OrdValBatch<RowRowLayout<((Row, Row), T, R)>>>>,
upper: Antichain<<Rc<OrdValBatch<RowRowLayout<((Row, Row), T, R)>>> as BatchReader>::Time>,
effort: usize,
activator: Option<Activator>,
exert_logic: Arc<dyn for<'a> Fn(Box<dyn Iterator<Item = (usize, usize, usize)> + 'a>) -> Option<usize> + Send + Sync>,
phantom: PhantomData<(ColumnatedMergeBatcher<Row, Row, T, R>, RcBuilder<OrdValBuilder<RowRowLayout<((Row, Row), T, R)>>>)>,
}