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