pub trait ApplyTernary<A, B = A, C = A> { type Output; // Required method fn apply(&self, a: A, b: B, c: C) -> Self::Output; }