pub fn visit_type_opt<F, I, T>(typ: &T, f: &mut F) -> Option<T>where
    F: TypeVisitor<I, T> + ?Sized,
    T: TypePtr<Id = I> + Clone,
    T::Types: Clone,
    T::Generics: Clone,
    T::Fields: Clone,
    T::TypeFields: Clone,
    T::SpannedId: Clone,
    I: Clone,