¿Cómo funciona la derivación en Haskell?

Los tipos de datos algebraicos (ADT) en Haskell pueden convertirse automáticamente en instancias de algunos tipos de clases (comoShow,Eq) derivando de ellos. data Maybe a = Nothing | Just a deriving (Eq, Ord) Mi pregunta es, ¿cómo funciona esto deriving , es decir, cómo sabe Haskell cómo...