【问题标题】:Difference between deriving typeclass and creating an instance派生类型类和创建实例之间的区别
【发布时间】:2023-03-19 01:26:01
【问题描述】:

假设我有这种数据类型:

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 

我在这里错过了什么?

注意

这个问题与assumed duplicate 不同,因为我正在寻找derivinginstance 关键字之间的对比。假定的骗子没有提及instance 关键字。

【问题讨论】:

标签: haskell


【解决方案1】:

你没有错过任何东西; deriving 只是让编译器为您写出“明显”的实例。如果您自己编写实例,它不会做任何您无法做的事情。

好处是(1)您不必写出实例,并且(2)它与任何阅读源代码的人交流实例显而易见的实例(而不是必须阅读实例定义来确定它是否是非标准的)。

【讨论】:

  • 有一个例外:Typeable。它的实例只能派生。
猜你喜欢
  • 2013-11-16
  • 1970-01-01
  • 2011-01-05
  • 1970-01-01
  • 1970-01-01
  • 2015-12-11
  • 1970-01-01
  • 2014-09-29
  • 2018-06-14
相关资源
最近更新 更多