Haskell中的代数数据types (ADT)可以通过从它们派生出来自动成为一些类的实例(如Show , Eq )。 data Maybe a = Nothing | Just a deriving (Eq, Ord) 我的问题是,这是如何deriving工作,即如何Haskell知道如何实现派生types派生ADT的function? 另外,为什么只能deriving到某些特定的类? 为什么我不能写我自己的派生类可以派生?