Como a derivação funciona em Haskell?

Tipos de dados algébricos (ADTs) em Haskell podem se tornar automaticamente instâncias de alguns tipos de classes (comoShow,Eq) derivando deles. data Maybe a = Nothing | Just a deriving (Eq, Ord) Minha pergunta é: como isso derivingfunciona, ou seja, como Haskell sabe como implementar as...