macro_rules! pattern {
    ($($elem:tt),+) => { ... };
    (@el $v:expr) => { ... };
    (@el $v:tt) => { ... };
}