pub type RowSpine<T, R> = Spine<Rc<OrdKeyBatch<RowLayout<((Row, ()), T, R)>>>, ColumnatedMergeBatcher<Row, (), T, R>, RcBuilder<OrdKeyBuilder<RowLayout<((Row, ()), T, R)>>>>;
struct RowSpine<T, R> {
operator: OperatorInfo,
logger: Option<Logger<DifferentialEvent, usize>>,
logical_frontier: Antichain<<Rc<OrdKeyBatch<RowLayout<((Row, ()), T, R)>>> as BatchReader>::Time>,
physical_frontier: Antichain<<Rc<OrdKeyBatch<RowLayout<((Row, ()), T, R)>>> as BatchReader>::Time>,
merging: Vec<MergeState<Rc<OrdKeyBatch<RowLayout<((Row, ()), T, R)>>>>>,
pending: Vec<Rc<OrdKeyBatch<RowLayout<((Row, ()), T, R)>>>>,
upper: Antichain<<Rc<OrdKeyBatch<RowLayout<((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, (), T, R>, RcBuilder<OrdKeyBuilder<RowLayout<((Row, ()), T, R)>>>)>,
}