macro_rules! vindaloo {
(@as_expr $e:expr) => { ... };
(@emit [$($mov:ident)*] [$(($($param:tt)*))*] [$($ret:tt)*] $($body:tt)*) => { ... };
(| | -> $ret:ty { $($body:tt)* }) => { ... };
(| | $body:expr) => { ... };
(|| -> $ret:ty { $($body:tt)* }) => { ... };
(|| $body:expr) => { ... };
(|$($param:ident),+| -> $ret:ty { $($body:tt)* }) => { ... };
(|$($param:ident),+| $body:expr) => { ... };
(|$($parname:ident: $partyp:ty),+| -> $ret:ty { $($body:tt)* }) => { ... };
(|$($parname:ident: $partyp:ty),+| $body:expr) => { ... };
(move | | -> $ret:ty { $($body:tt)* }) => { ... };
(move | | $body:expr) => { ... };
(move || -> $ret:ty { $($body:tt)* }) => { ... };
(move || $body:expr) => { ... };
(move |$($param:ident),+| -> $ret:ty { $($body:tt)* }) => { ... };
(move |$($param:ident),+| $body:expr) => { ... };
(move |$($parname:ident: $partyp:ty),+| -> $ret:ty { $($body:tt)* }) => { ... };
(move |$($parname:ident: $partyp:ty),+| $body:expr) => { ... };
}