macro_rules! succeed {
(|$first_arg:ident $(, $arg:ident )*| $function_body:expr) => { ... };
(|$first_arg:ident:$first_arg_type:ty $(, $arg:ident:$arg_type:ty )*| $function_body:expr) => { ... };
($value:expr) => { ... };
() => { ... };
}