use super::*;
pub trait FnOptionOnce<T: Tuple>: FnOnce<T, Output = Option<Self::Some>> {
type Some;
}
impl<T: Tuple, F: FnOnce<T, Output = Option<Some>>, Some> FnOptionOnce<T> for F {
type Some = Some;
}
pub trait FnOptionMut<T: Tuple>: FnMut<T> + FnOptionOnce<T> {}
impl<T: Tuple, F: FnMut<T> + FnOptionOnce<T>> FnOptionMut<T> for F {}
pub trait FnOption<T: Tuple>: Fn<T> + FnOptionMut<T> {}
impl<T: Tuple, F: Fn<T> + FnOptionMut<T>> FnOption<T> for F {}