Haskell 派生typeclass和创建实例之间的区别

Haskell 派生typeclass和创建实例之间的区别,haskell,Haskell,假设我有以下数据类型: data TrafficLight = Red | Yellow | Green deriving (Eq) 它与创建Eq的实例有何不同 data TrafficLight = Red | Yellow | Green instance Eq TrafficLight where Red == Red = True Green == Green = True Yellow == Yellow = True _ == _ =

假设我有以下数据类型:

data TrafficLight = Red | Yellow | Green deriving (Eq)
它与创建
Eq
的实例有何不同

data TrafficLight = Red | Yellow | Green

instance Eq TrafficLight where
    Red == Red = True  
    Green == Green = True  
    Yellow == Yellow = True  
    _ == _ = False 
我错过了什么

注意


这个问题不同于,因为我在寻找
派生
实例
关键字之间的对比。假定的dupe没有提到
实例
关键字。

您没有遗漏任何内容<代码>派生就是让编译器为您写出“显而易见”的实例。如果你自己写了这个实例,它不会做任何你做不到的事情


好处是(1)您不必写出实例,(2)它向任何阅读源代码的人传达实例是显而易见的(而不必阅读实例定义来确定它是否非标准).

@Ben,这应该是个答案。@BalinKingOfMoria我把它提升到了one@Ben完美的对这个好答案投赞成票:)有一个例外:
Typeable
。其实例只能派生。