Several public structs in the verifier and round-execution code have FftField bounds on the struct definition itself. The Rust idiom is to place trait bounds on impl blocks, not struct definitions — the struct just holds data and doesn't need to constrain what can name the type. Currently, downstream code generic over F: Field cannot even name these types without upgrading to FftField
// Won't compile today:
fn log_commitment<F: Field>(c: &Commitments<F>) { ... }
// ^^^^^^^^ error: FftField is not satisfied
The minimum bound is Field (not unbounded) because the inner types (whir::Commitment, irs_commit::Commitment, whir::FinalClaim, UnivariateEvaluation) require Field on their own struct definitions.
Several public structs in the verifier and round-execution code have FftField bounds on the struct definition itself. The Rust idiom is to place trait bounds on impl blocks, not struct definitions — the struct just holds data and doesn't need to constrain what can name the type. Currently, downstream code generic over F: Field cannot even name these types without upgrading to FftField
The minimum bound is Field (not unbounded) because the inner types (whir::Commitment, irs_commit::Commitment, whir::FinalClaim, UnivariateEvaluation) require Field on their own struct definitions.