It seems that most of these manual impls in this patch could be done by `#[deriving]`?