visitor
pub trait Visit { fn visit<V: Visitor>(&self, f: &mut V) -> Result<(), V::Error>; }
fn visit<V: Visitor>(&self, f: &mut V) -> Result<(), V::Error>