pub trait Zip<O> { type Output: UnZip<Left = Self, Right = O>; // Required method fn zip(self, other: O) -> Self::Output; }