pub fn choose<N, M, C1, C2, A, B, Row1, Row2>(
    _: N,
    _: M,
    cont: PartialSession<C2, A>
) -> PartialSession<C1, A> where
    C1: Context,
    C2: Context,
    A: Protocol,
    B: Protocol,
    Row2: RowCon,
    Row1: Send + 'static,
    Row2: Send + 'static,
    Row1: ToRow<Row = Row2>,
    N: ContextLens<C1, ExternalChoice<Row1>, B, Target = C2>,
    M: Prism<Row2, Elem = B>,