use std::{mem, ptr};
pub trait Map<T> {
fn map<F>(self, f: F) -> Self
where
F: FnOnce(T) -> T;
}
impl<T> Map<T> for Box<T> {
fn map<F>(mut self, f: F) -> Self
where
F: FnOnce(T) -> T,
{
let p: *mut T = &mut *self;
mem::forget(self);
unsafe {
ptr::write(p, f(ptr::read(p)));
Box::from_raw(p)
}
}
}