pub trait At<I, X> { type Pruned; fn inject(x: X) -> Self; fn uninject(self) -> Result<X, Self::Pruned>; }