Appendix. 特质声明 [traits][edit]

trait HasNil {
  nil() -> Self
}

trait HasOne {
  one() -> Self
}

trait AddMonoid: Add + HasNil {}

trait MulMonoid: Mul + HasOne {}

trait Semiring: AddMonoid + MulMonoid {}

trait StarSemiring: Semiring {
  star(Self) -> Self
}

trait Inverse {
  inverse(Self) -> Self
}