pub fn freeze<G, T, F>(arranged: &Arranged<G, T>, func: F) -> Arranged<G, TraceFreeze<T, F>>
where
    G: Scope<Timestamp=T::Time>,
    T: TraceReader+Clone,
    F: Fn(T::TimeGat<'_>)->Option<T::Time>+'static,
{
    let func1 = Rc::new(func);
    let func2 = func1.clone();
    Arranged {
        stream: arranged.stream.map(move |bw| BatchFreeze::make_from(bw, func1.clone())),
        trace: TraceFreeze::make_from(arranged.trace.clone(), func2),
    }
}
Freezes updates to an arrangement using a supplied function.

This method is experimental, and should be used with care. The intent is that the function
`func` can be used to restrict and lock in updates at a particular time, as suggested in the
module-level documentation.
differential-dataflow/src/trace/wrappers/freeze.rs