Wie funktioniert das Ableiten in Haskell?

Algebraische Datentypen (ADT) in Haskell kann automatisch Instanzen einiger geworden typeclasse s (wieShow,Eq) durch Ableiten von ihnen. data Maybe a = Nothing | Just a deriving (Eq, Ord) Meine Frage ist, wie funktioniert das deriving, dh woher weiß Haskell, wie die Funktionen der abgeleiteten...