Macro compose
Source macro_rules! compose {
($fnLeft:ident,$isLeftFnAsync:ident,-> with_args($args:expr) $($others:tt)*) => { ... };
($fnLeft:ident,$isLeftFnAsync:ident,.provide($p1:expr) $($others:tt)*) => { ... };
($fLeft:ident,$isLeftFnAsync:ident,$fRight:ident, $isRightAsync:ident, .provide($p:expr) $($others:tt)*) => { ... };
($fLeft:ident,$isLeftFnAsync:ident,$fRight:ident, $isRightAsync:ident, -> $($others:tt)*) => { ... };
($fLeft:ident,$isLeftFnAsync:ident,-> $fn:ident.provide($p:expr) $($others:tt)*) => { ... };
($fLeft:ident,$isLeftFnAsync:ident,-> $fn:ident.provide($p:expr) $($others:tt)*) => { ... };
($fLeft:ident,$isLeftFnAsync:ident,-> $fn:ident $($others:tt)*) => { ... };
($fn:ident $($others:tt)*) => { ... };
}