短==实现

时间:2012-09-19 14:15:04

标签: haskell

我有一个简单的类型

data Day =  Monday | Tuesday | Wednesday | Thursday | Friday

我是haskell的新手,所以我写下{​​{1}}如下。

==

有没有更短的方式来编写(==) :: Day -> Day -> Bool Monday == Monday = True Tuesday == Tuesday = True Wednesday == Wednesday = True ... x == y = False 实现?

2 个答案:

答案 0 :(得分:12)

您可以使用deriving关键字让编译器自动生成这些代码:

data Day = Monday | Tuesday | Wednesday | Thursday | Friday
           deriving Eq

这将为您的数据类型定义==/=

“可以为任何数据类型派生Eq,其成分也是Eq的实例。” http://www.haskell.org/ghc/docs/7.4.2/html/libraries/base/Data-Eq.html

答案 1 :(得分:6)

你可以写

data Day =  Monday | Tuesday | Wednesday | Thursday | Friday
  deriving Eq

这意味着GHC将自动生成一天的Eq实例。 它将生成(==)以使Monday == MondayTuesday == TuesdayTrue等,但Monday == FridayFalse

请注意,您无法编写类似

的内容
(==) :: Day -> Day -> Bool
x == x = True
x == y = False

这也许是你的想法。

如果您尝试,GHC会抱怨x的定义冲突。