Type class son una forma de sobrecargar funciones u operadores al imponer restricciones al polimorfismo.
Por ejemplo:
(+) :: a -> a -> a
no está bien porque queremos restringir la suma de números.
Igualmente,
(<) :: a -> a -> Bool
no está bien porque no está claro a priori cómo comparar con tipos arbitrarios.
Para abordar este problema, Haskell proporciona Type class. Estos restringen el polimorfismo. Por ejemplo:
(+) :: Num a => a -> a -> a
dice que el tipo a debe ser numérico, y
(<) :: Ord a => a -> a -> Bool
dice que debe ser ordenable.
Y eso es todo! listo, pero pero puedo crear mi propio type class? Lucho, por supuesto viejo... pero lo vamos a ver en el próximo post.