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 as Context>::Length) -> PartialSession<<C2 as AppendContext<(A, ())>>::Appended, B>,