use super::*;
pub trait FnIteratorOnce<T: Tuple>:
FnOnce<T, Output: IntoIterator<IntoIter = Self::Iterator>>
{
type Iterator: Iterator<Item = Self::Item>;
type Item;
}
impl<T: Tuple, F: FnOnce<T, Output: IntoIterator>> FnIteratorOnce<T> for F {
type Iterator = <F::Output as IntoIterator>::IntoIter;
type Item = <F::Output as IntoIterator>::Item;
}
pub trait FnIteratorMut<T: Tuple>: FnMut<T> + FnIteratorOnce<T> {}
impl<T: Tuple, F: FnMut<T> + FnIteratorOnce<T>> FnIteratorMut<T> for F {}
pub trait FnIterator<T: Tuple>: Fn<T> + FnIteratorMut<T> {}
impl<T: Tuple, F: Fn<T> + FnIteratorMut<T>> FnIterator<T> for F {}