Type classes are a language of their own, this is an attempt to document some features.
Work in progress.
Accept values with varying number of arguments
Common technique used in EDSLs (embedded domain-specific languages) to accept functions with varying number of arguments.
Hackage) QuickCheck
(quickCheck :: Testable prop => prop -> IO ()