A type class is a type system construct that supports ad hoc polymorphism. This is achieved by adding constraints to type variables in parametrically polymorphic types.
Type class instances allow us to add behaviour to types without changing the types themselves.
Type classes in Scalaz
Here is an overview of some of the type class hierarchy present in Scalaz