pub trait Quire<P> {
type Bits;
fn init() -> Self;
fn from_posit(p: P) -> Self;
fn to_posit(&self) -> P;
fn from_bits(v: Self::Bits) -> Self;
fn to_bits(&self) -> Self::Bits;
fn is_zero(&self) -> bool;
fn is_nar(&self) -> bool;
fn add_product(&mut self, p_a: P, p_b: P);
fn sub_product(&mut self, p_a: P, p_b: P);
fn clear(&mut self);
fn neg(&mut self);
}