macro_rules! new_monoid {
( $ident:ident = ($ty:ty, $op:expr, $id:expr) ) => { ... };
( $ident:ident = ($ty:ty, $op:expr, $id:expr, +commutative) ) => { ... };
( $ident:ident = ($ty:ty, $op:expr, $id:expr, $recip:expr) ) => { ... };
( $ident:ident = ($ty:ty, $op:expr, $id:expr, $recip:expr, +commutative) ) => { ... };
}