/// The generic trait for all caches.
///
/// This trait is implemented on all caches. This allows
/// someone to write a function like
/// `fn f(cache: &mut impl FnCache<u32,u32>, x: &u32) -> u32`
/// and have it work for all the caches written in this crate.
/// The generic trait for caches which support getting multiple
/// values.
///
/// This trait may have additional restrictions such as I is
/// [`Clone`]. This allows someone to write a function like
/// `fn f(cache: &mut impl FnCacheMany<u32,u32>, x: &u32) -> u32` and
/// have it work in most cases when the key is cloneable with caches
/// in this crate.