Type classes represent *global* knowledge about a type: `Ord Foo` specifies a total order on `Foo` canonical for the entire program.

OTOH, "implicit values" or "named instances" in some other PLs are *contextual* knowledge about a type.

Comments