From my personal experience, we only need six primitive traits (Int, UnsignedInt, Signed, Float, Zero, One) in std::num to cover most use cases. They provide very basic functionalities for generic mathematics. Other numeric hierarchies should left to external crates.