macro_rules! comp {
[$ex:expr, for $i:pat in $iter:expr $(, if $cond:expr)?] => { ... };
[$ex:expr, for $i:pat in $iter:expr $(=> {$($then:stmt;)+})? $(,for $i2:pat in $iter2:expr $(=> {$($then2:stmt;)+})?)+ $(, if $cond:expr)?] => { ... };
{$key:expr => $ex:expr, for $i:pat in $iter:expr $(, if $cond:expr)?} => { ... };
{$key:expr, $ex:expr, for $i:pat in $iter:expr $(, if $cond:expr)?} => { ... };
{{$key:expr, $ex:expr}, for $i:pat in $iter:expr $(, if $cond:expr)?} => { ... };
{$key:expr => $ex:expr, for $i:pat in $iter:expr $(=> {$($then:stmt;)+})? $(,for $i2:pat in $iter2:expr $(=> {$($then2:stmt;)+})?)+ $(, if $cond:expr)?} => { ... };
{$key:expr, $ex:expr, for $i:pat in $iter:expr $(=> {$($then:stmt;)+})? $(,for $i2:pat in $iter2:expr $(=> {$($then2:stmt;)+})?)* $(, if $cond:expr)?} => { ... };
{{$key:expr, $ex:expr}, for $i:pat in $iter:expr $(=> {$($then:stmt;)+})? $(,for $i2:pat in $iter2:expr $(=> {$($then2:stmt;)+})?)* $(, if $cond:expr)?} => { ... };
}