An implementation of Constraint for two types A and B that requires an Equality[A]
and a conversion function from B to A.
an Equivalence type class for A
Indicates whether the objects passed as a and b are equal by returning the
result of invoking areEqual(a, cnv(b)) on the passed equalityOfA object.
In other words, the b object of type B is first converted to an A via the passed conversion
function, cnv, then compared for equality with the a object.
a left-hand-side object being compared with another (right-hand-side one) for equality (e.g., a == b)
a == b
a right-hand-side object being compared with another (left-hand-side one) for equality (e.g., a == b)