pub fn cut<X, C, C1, C2, A, B, Func>( cont1: PartialSession<C1, A>, cont2: Func, ) -> PartialSession<C, B>where A: Protocol, B: Protocol, C: Context, C1: Context, C2: Context + AppendContext<(A, ())>, X: SplitContext<C, Left = C1, Right = C2>, Func: FnOnce(C2::Length) -> PartialSession<C2::Appended, B>,