Haskell中的代数数据类型(ADT)可以通过从它们派生而自动成为某些类型(例如Show,Eq)的实例.
data Maybe a = Nothing | Just a
deriving (Eq, Ord)
Run Code Online (Sandbox Code Playgroud)
我的问题是,这是如何deriving工作的,即Haskell如何知道如何为派生的ADT实现派生类型类的功能?
另外,为什么deriving仅限于某些类型类?为什么我不能编写自己可以派生的类型类?