///|
pub trait HasNil {
  fn nil() -> Self
}

///|
pub trait HasOne {
  fn one() -> Self
}

///|
pub trait Abs: HasNil + Neg + Compare {}

///|
pub trait Signum: HasNil + HasOne + Neg + Eq + Compare {}