pub trait SmartHashSet{
type output;
type option;
// Required method
fn get_matching<'a>(
&'a self,
options: <<Self as SmartHashSet>::output as SmartHash>::option,
) -> Option<Vec<&'a Self::output>>;
// Provided method
fn get_none_default(&self) -> Self::option { ... }
}