macro_rules! lazy_parse {
    (
        $co:ident;
        $out:expr;
        $var:ident in $iter:expr
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        $var:ident <- $iter:expr
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        let $var:ident $(: $ty:ty)? = $expr:expr
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        let mut $var:ident $(: $ty:ty)? = $expr:expr
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        let { $( $let_stmts:tt )* }
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        let mut { $( $let_stmts:tt )* }
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        let $var:pat = $expr:expr , else { $( $else_code:tt )* }
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        let $var:pat = $expr:expr
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        for $var:pat in $iter:expr
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        $pred:expr
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        $let_stmt:stmt
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
        $var:pat in $iter:expr
        $(, $( $unparsed:tt )* )?
    ) => { ... };
    (
        $co:ident;
        $out:expr;
    ) => { ... };
}