pub fn parser<'a, Y: 'a + 'static, X: 'a + 'static + Binder, E: Error<char> + 'a + 'static>(
x: impl Parser<char, X, Error = E> + 'a + 'static + Clone,
v: impl Parser<char, X::Var, Error = E> + 'a + 'static + Clone,
y: impl Parser<char, Y, Error = E> + 'a + 'static + Clone,
splice: impl Parser<char, GTerm<X, Y>, Error = E> + 'a + 'static + Clone,
) -> impl Parser<char, GTerm<X, Y>, Error = E> + 'a + 'static + Clone