macro_rules! pipe_fun {
(&, $ret:expr) => { ... };
((as $typ:ty), $ret:expr) => { ... };
({$fun:expr}, $ret:expr) => { ... };
([$fun:ident], $ret:expr) => { ... };
(($fun:ident($($arg:expr),*)), $ret:expr) => { ... };
($fun:ident, $ret:expr) => { ... };
}