pub fn alternative<A, I: Clone>(
    mut fst: impl Parser<A, I>,
    mut snd: impl Parser<A, I>,
) -> impl Parser<A, I> {
    move |input: I| fst.parse(input.clone()).or_else(|| snd.parse(input))
}
/// Tries to apply the first parser, if it fails, it tries to apply the second parser.
Tries to apply the first parser, if it fails, it tries to apply the second parser.
Tries to apply the first parser if it fails it tries to apply the second parser .
pub fn alternative<A, I: Clone>(
    mut fst: impl Parser<A, I>,
    mut snd: impl Parser<A, I>,
) -> impl Parser<A, I> {
    move |input: I| fst.parse(input.clone()).or_else(|| snd.parse(input))
}
pub fn alternative < A , I : Clone > ( mut fst : impl Parser < A , I > , mut snd : impl Parser < A , I > , ) -> impl Parser < A , I > { move | input : I | fst . parse ( input . clone ( ) ) . or_else ( | | snd . parse ( input ) ) }
Tries to apply the first parser, if it fails, it tries to apply the second parser.
Tries to apply the first parser if it fails it tries to apply the second parser .
fst
impl Parser<A, I>
snd
impl Parser<A, I>