pub fn visit_type_opt<F: ?Sized, I, T>(typ: &T, f: &mut F) -> Option<T>where F: TypeVisitor<I, T>, T: Deref<Target = Type<I, T>> + From<Type<I, T>> + Clone, I: Clone,