pub fn merge_tuple_iter<'a, I, F, T, R>(types: I, f: F) -> Option<R>
where I: IntoIterator<Item = (&'a T, &'a T)>, I::IntoIter: FusedIterator + Clone, F: FnMut(&'a T, &'a T) -> Option<T>, T: Clone + 'a, R: FromIterator<T>,