派生类型类和创建实例之间的区别

5
假设我有这种数据类型:
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 

我在这里缺少了什么?

注意

这个问题不同于假定的重复问题,因为我正在寻找derivinginstance关键字之间的对比。假定的重复并没有提到instance关键字。


2
https://dev59.com/mG865IYBdhLWcg3wWtGz - shree.pat18
@Ben 那应该就是一个答案。 - Joshua Grosso Reinstate CMs
@BalinKingOfMoria 我已经将其升级了。 - Ben
@Ben 很完美。因为你的好答案,我给你点赞 :) - Joshua Grosso Reinstate CMs
1个回答

7
你没有错过任何东西;deriving只是让编译器为你编写“显而易见”的实例。如果您自己编写实例,它并不会做任何您无法完成的事情。 其好处是(1)您不必编写实例,(2)它向阅读源代码的任何人传达了实例显而易见的(而不必阅读实例定义以确定它是否非标准)。

1
有一个例外:Typeable。它的实例只能通过派生获得。 - dfeuer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接