macro_rules! def_monoid {
(
$(#[$attr:meta])*
$name:ident = ($ty:ty, $op:expr, $id:expr $(, $marker:ident)? $(,)?)
) => { ... };
(
$(#[$attr:meta])*
pub $name:ident = ($ty:ty, $op:expr, $id:expr $(, $marker:ident)? $(,)?)
) => { ... };
(
$(#[$attr:meta])*
pub($(vis:tt)+) $name:ident = ($ty:ty, $op:expr, $id:expr $(, $marker:ident)? $(,)?)
) => { ... };
}