macro_rules! reduce {
($a:expr, $b:expr, $c:expr, $d:expr, $( $x:expr ),+ => $fn:path) => { ... };
($a:expr, $b:expr, $( $x:expr ),+ => $fn:path) => { ... };
($a:expr, $b:expr => $fn:path) => { ... };
($a:expr => $fn:path) => { ... };
}