macro_rules! signature_by_type {
($a1:ty , $($arg:ty),* => $_return:ty) => { ... };
( => $_return:ty) => { ... };
( $a1:ty => $_return:ty) => { ... };
( => ) => { ... };
( $a1:ty => ) => { ... };
($a1:ty , $($arg:ty),* => ) => { ... };
}