macro_rules! do_ { ($F:ty; $e:expr) => { ... }; ($F:ty; $x:ident = $e:expr; $($rest:tt)+) => { ... }; }
Monadic do-notation sugar.
Desugars sequential x = expr bindings into nested Chain::chain calls.
x = expr
Chain::chain
do_! { OptionF; x = Some(1); y = Some(x + 1); OptionF::pure(x + y) }