代码之家  ›  专栏  ›  技术社区  ›  dopatraman

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

  •  5
  • dopatraman  · 技术社区  · 9 年前

    假设我有这样的数据类型:

    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 因为我在寻找 deriving instance 关键字。假定的受骗者没有提到 例子 关键字。

    1 回复  |  直到 8 年前
        1
  •  7
  •   Ben    9 年前

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

    好处是:(1)您不必写出实例,(2)它可以与任何阅读该实例的源代码的人进行通信 显而易见的是(而不是必须阅读实例定义来确定它是否是非标准的)。