What are possible implementations of Haskell's type classes and what are their (dis)advantages? As far as I know, a Haskell function with type classes constraints is internally compiled to a function with additional arguments that receive dictionaries with the necessary implementations of each particular type class.


Are there any other possibilities how compile type classes?
If so, what are their (dis)advantages?
And what compilers use them?
JHC uses a different approach.  The compiler's intermediate language is a dependently typed lambda-calculus where there is no distinction between types and values.  JHC therefore can perform a case analysis on the type parameter of a function and call the correct overloaded function directly.

The JHC website goes into some depth on the implementation, as well as its advantages over the standard dictionary passing implementation.