macro_rules! catcher {
    ($name:ident, $($tt:tt)*) => { ... };
    (
		$name:ident<$data_ty:ty>,
		|$check_req:ident, $check_res:ident| $check_block:block,
		|$req:ident, $res:ident| -> $ret_type:ty $block:block
	) => { ... };
    (
		$name:ident<$data_ty:ty>,
		|$check_req:ident, $check_res:ident| $check_block:block,
		|$req:ident, $res:ident, $( $data:ident ),*| -> $ret_type:ty $block:block
	) => { ... };
}