qualified_do_macro 0.1.0

Core macro implementation for qualified_do
Documentation
fn main() {
    use either::Either::*;
    use functo_rs::nonlinear::*;
    use qualified_do_macro::qdo;
    let is = vec![Left(1), Right(2), Left(3)];
    let js = vec![Some(4), Some(5), None];

    let ans: Vec<i64> = {
        let is = is.clone();
        let js = js.clone();
        qdo! {UndetVec {
                Right(i) <- is.clone();
                Some(j) <- js.clone();
                let k = 100i64;
                return i + j + k
            }
        }
    };
    assert_eq!(
        ans,
        is.into_iter()
            .filter_map(|i| i.right())
            .flat_map(|i| js.iter().flatten().map(move |j| i + j + 100))
            .collect::<Vec<_>>()
    );
}