Conveyor<F, O2> through<O2>(Conveyor<F, ChannelF<F, O, O2>> channel) => zipWith(channel, (o, ChannelF<F, O, O2> f) => f(o)).flatMap((a) => cast<Conveyor<F, O2>>(a));