macro_rules! mdo {
(pure $e:expr ) => { ... };
(let $v:ident = $e:expr ; $($rest:tt)*) => { ... };
(guard $boolean:expr ; $($rest:tt)*) => { ... };
(_ <- $monad:expr ; $($rest:tt)* ) => { ... };
(&$v:ident <- $monad:expr ; $($rest:tt)* ) => { ... };
($v:ident <- pure $e:expr ; $($rest:tt)* ) => { ... };
($v:ident <- $monad:expr ; $($rest:tt)* ) => { ... };
($monad:expr ) => { ... };
}Expand description
macro for iterables (IntoIterator) as monads enabling monad comprehensions over iterables
You can use:
pure return_expresionto return an expression valuemonadic_expressionto end with a monad expressionv <- pure return_expresionto lift a rhs expression value with Option::pure(x)v <- monadic_expressionto use the monad result&v <- &containerto use a reference item result from a by reference container_ <- monadic_expressionto ignore the monad resultlet z = expressionto combine monad resultsguard boolean_expressionto filter results