I feel like the split between Field and PrimeField is wrong. Field should encompass as much as possible what a field element is, while PrimeField should only contains things specific to prime fields.
Here is how I would like PrimeField to look like:
pub trait PrimeField: Field {
const MULTIPLICATIVE_GENERATOR: Self;
const S: u32;
const ROOT_OF_UNITY: Self;
const ROOT_OF_UNITY_INV: Self;
const DELTA: Self;
}
Every method provided by PrimeField could sensibly be moved to Field, and constants like MODULUS, and CAPACITY could also be moved.
Is there a reason why this is not already the case?
I feel like the split between
FieldandPrimeFieldis wrong.Fieldshould encompass as much as possible what a field element is, whilePrimeFieldshould only contains things specific to prime fields.Here is how I would like
PrimeFieldto look like:Every method provided by
PrimeFieldcould sensibly be moved toField, and constants likeMODULUS, andCAPACITYcould also be moved.Is there a reason why this is not already the case?