我有一个简单的类型
data Day = Monday | Tuesday | Wednesday | Thursday | Friday
我是haskell的新手,所以我写下{{1}}如下。
==
有没有更短的方式来编写(==) :: Day -> Day -> Bool
Monday == Monday = True
Tuesday == Tuesday = True
Wednesday == Wednesday = True
...
x == y = False
实现?
答案 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 == Monday
,Tuesday == Tuesday
为True
等,但Monday == Friday
为False
请注意,您无法编写类似
的内容(==) :: Day -> Day -> Bool
x == x = True
x == y = False
这也许是你的想法。
如果您尝试,GHC会抱怨x的定义冲突。