An implementation of Constraint for two types A and B that requires an Equality[B]
and a conversion function from A to B.
an Equivalence type class for B
Indicates whether the objects passed as a and b are equal by return the
result of invoking areEqual(cnv(a), b) on the passed equalityOfB object.
In other words, the a object of type A is first converted to a B via the passed conversion
function, cnv, then compared for equality with the b 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)