`U: Iterator<U>` is used in the trait and `U: Iterator<B>` in the impl ``` rust trait Iterator<A> { fn next(&mut self) -> Option<A>; } trait IteratorUtil<A> { fn zip<B, U: Iterator<U>>(self, other: U) -> ZipIterator<Self, U>; } impl<A, T: Iterator<A>> IteratorUtil<A> for T { fn zip<B, U: Iterator<B>>(self, other: U) -> ZipIterator<T, U> { ZipIterator{a: self, b: other} } } struct ZipIterator<T, U> { a: T, b: U } ```