pub fn recursive<'a, I: Clone, O, P: Parser<I, O, Error = E> + 'a, F: FnOnce(Recursive<'a, I, O, E>) -> P, E: Error<I>>(f: F) -> Recursive<'a, I, O, E> {
    let rc = Rc::new(OnceCell::new());
    let parser = f(Recursive(rc.clone()));
    rc.set(Box::new(parser))
        .unwrap_or_else(|_| unreachable!());
    Recursive(rc)
}
/// Construct a recursive parser (i.e: a parser that may contain itself as part of its pattern).
///
/// The given function must create the parser. The parser must not be used to parse input before this function returns.
Construct a recursive parser .
The given function must create the parser. The parser must not be used to parse input before this function returns.
Construct a recursive parser . The given function must create the parser . The parser must not be used to parse input before this function returns .
pub fn recursive<'a, I: Clone, O, P: Parser<I, O, Error = E> + 'a, F: FnOnce(Recursive<'a, I, O, E>) -> P, E: Error<I>>(f: F) -> Recursive<'a, I, O, E> {
    let rc = Rc::new(OnceCell::new());
    let parser = f(Recursive(rc.clone()));
    rc.set(Box::new(parser))
        .unwrap_or_else(|_| unreachable!());
    Recursive(rc)
}
pub fn recursive < ' a , I : Clone , O , P : Parser < I , O , Error = E > + ' a , F : FnOnce ( Recursive < ' a , I , O , E > ) -> P , E : Error < I > > ( f : F ) -> Recursive < ' a , I , O , E > { let rc = Rc :: new ( OnceCell :: new ( ) ) ; let parser = f ( Recursive ( rc . clone ( ) ) ) ; rc . set ( Box :: new ( parser ) ) . unwrap_or_else ( | _ | unreachable ! ( ) ) ; Recursive ( rc ) }
Construct a recursive parser (i.e: a parser that may contain itself as part of its pattern).
Construct a recursive parser ( i . e : a parser that may contain itself as part of its pattern ) .
f
F