pub fn apply_channel<A, B>(
    f: Session<ReceiveChannel<A, B>>,
    a: Session<A>
) -> Session<B> where
    A: Protocol,
    B: Protocol