pub(crate) fn bare_type(ty: Box<syn::Type>) -> Option<syn::TypePath> {
	match *ty {
		syn::Type::Array(a) => bare_type(a.elem),
		syn::Type::BareFn(_) => None,
		syn::Type::ImplTrait(_) => None,
		syn::Type::Infer(_) => None,
		syn::Type::Macro(_) => None,
		syn::Type::Never(_) => None,
		syn::Type::TraitObject(_) => None,
		syn::Type::Verbatim(_) => None,
		syn::Type::Ptr(p) => bare_type(p.elem),
		syn::Type::Slice(s) => bare_type(s.elem),
		syn::Type::Tuple(t) => bare_type(Box::new(t.elems.first()?.clone())), // TODO
		syn::Type::Group(g) => bare_type(g.elem),
		syn::Type::Paren(p) => bare_type(p.elem),
		syn::Type::Reference(r) => bare_type(r.elem),
		syn::Type::Path(ty) => Some(ty),
		_ => todo!(),
	}
}