Downside to the `#[deriving(FromPrimitive)] implementation. `syntax::ext::deriving::generic::*` works a method at a time. Because `FromPrimitive` requires at least two methods to be implemented, both generating both methods ends up reporting an error. This wouldn't be that difficult to change. We would just have to modify `TraitDef.expand_struct_def` and `TraitDef.expand_enum_def` to return either an `Option<@ast::item>` or `Result<@ast::item,~str>` and use that to signal that it's not worth implementing the rest of the methods.