[Haskell-beginners] How does the Deriving being implemented in Haskell?