There is a paper on The Implicit Calculus as a generalization of type classes. Coq's canonical structures are also a generalization of type classes. The paper does not mention canonical structures however. The approaches seem quite similar. What are the commonalities and differences of these two approaches to generalize type classes?