use std::fmt::{Debug, Display};
use crate::{Eval, Fun2, Fun2Label};
pub fn lt<L1, L2, V>(lhs: Eval<L1, &V>, rhs: Eval<L2, &V>) -> Eval<Fun2Label<'static, L1, L2>, bool>
where
L1: Display + Copy,
L2: Display + Copy,
V: Debug + PartialOrd,
{
Fun2::infix("<", V::lt).eval_once(lhs, rhs)
}
pub fn le<L1, L2, V>(lhs: Eval<L1, &V>, rhs: Eval<L2, &V>) -> Eval<Fun2Label<'static, L1, L2>, bool>
where
L1: Display + Copy,
L2: Display + Copy,
V: Debug + PartialOrd,
{
Fun2::infix("<=", V::le).eval_once(lhs, rhs)
}
pub fn gt<L1, L2, V>(lhs: Eval<L1, &V>, rhs: Eval<L2, &V>) -> Eval<Fun2Label<'static, L1, L2>, bool>
where
L1: Display + Copy,
L2: Display + Copy,
V: Debug + PartialOrd,
{
Fun2::infix(">", V::gt).eval_once(lhs, rhs)
}
pub fn ge<L1, L2, V>(lhs: Eval<L1, &V>, rhs: Eval<L2, &V>) -> Eval<Fun2Label<'static, L1, L2>, bool>
where
L1: Display + Copy,
L2: Display + Copy,
V: Debug + PartialOrd,
{
Fun2::infix(">=", V::ge).eval_once(lhs, rhs)
}