在创建数据类型时,派生的意思是什么?

时间:2016-03-15 14:31:43

标签: haskell

假设我们看看:

data Quadrants = Origin |
                 Quadrant_I | Quadrant_II | Quadrant_III | Quadrant_IV |
                 X_Axis_Positive | X_Axis_Negative | Y_Axis_Positive | Y_Axis_Negative
  deriving (Show, Eq)

"派生(Show,Eq)"意思?我有时只看到"派生(显示)"。

1 个答案:

答案 0 :(得分:7)

deriving关键字“自动导出”某些类型类的实现。这仅适用于某些内置类型类(包括ShowEq)。

Show创建的deriving实例将构造函数的名称生成为字符串,如果构造函数接受任何参数,则show每个参数的结果以逗号分隔并被括号括起来。

因此,您的类型deriving Show将等同于以下实例:

instance Show Quadrants where
    show Origin = "Origin"
    show Quadrant_I = "Quadrant_I"
    show Quadrant_II = "Quadrant_II"
    ...

类似地,派生的Eq实例如果使用相同的构造函数和相同的参数创建它们,则认为两个值相等。所以你的类型是:

instance Eq Quadrants where
    Origin == Origin = True
    Quadrant_I == Quadrant_I = True
    Quadrant_II == Quadrant_II = True
    ...
    _ == _ = False

如您所见,使用deriving可以节省相当多的代码。