macro_rules! wrt_mdo {
(lift $nested_monad:expr ) => { ... };
(pure $e:expr ) => { ... };
(guard $boolean:expr ; $($rest:tt)*) => { ... };
(_ <- tell_str $str:literal ; $($rest:tt)* ) => { ... };
(_ <- tell_array $ar:expr ; $($rest:tt)* ) => { ... };
(_ <- tell_vec $e:expr ; $($rest:tt)* ) => { ... };
(_ <- tell_string $e:expr ; $($rest:tt)* ) => { ... };
(_ <- $monad:expr ; $($rest:tt)* ) => { ... };
(let $v:ident = $e:expr ; $($rest:tt)* ) => { ... };
($v:ident <- lift $nested_monad:expr ; $($rest:tt)* ) => { ... };
($v:ident <- $monad:expr ; $($rest:tt)* ) => { ... };
($monad:expr ) => { ... };
}
macro for a WriterT<M, W = String>
monad transformer holding a pair (M, W) where M: Monad, W: Monoid;
It uses the type alias Log in type annotations