use core::iter::{empty, once, repeat};
struct DyadIterator<L, R, F> {
l: L,
r: R,
f: F,
}
impl<L, R, A, B, C, F> Iterator for DyadIterator<L, R, F>
where L: Iterator<Item = A>,
R: Iterator<Item = B>,
F: FnMut(A, B) -> C
{
type Item = C;
fn next(&mut self) -> Option<C> {
match (self.l.next(), self.r.next()) {
(Some(a), Some(b)) => Some((self.f)(a, b)),
_ => None,
}
}
}
fn apply<L, R, A, B, C, F>(lhs: L, rhs: R, f: F) -> DyadIterator<L, R, F>
where F: Fn(A, B) -> C,
L: Iterator<Item = A>,
R: Iterator<Item = B>
{
DyadIterator {
l: lhs,
r: rhs,
f: f,
}
}