pub trait Fork { type Parent; fn fork(&self) -> Self; fn new() -> Self; fn hoist(&self, outer: &mut Self::Parent); }