我有一个简单的类型
data Day = Monday | Tuesday | Wednesday | Thursday | Friday
我是haskell的新手,所以我写==
如下。
(==) :: Day -> Day -> Bool
Monday == Monday = True
Tuesday == Tuesday = True
Wednesday == Wednesday = True
...
x == y = False
有没有更短的方法来编写==
实现?
我有一个简单的类型
data Day = Monday | Tuesday | Wednesday | Thursday | Friday
我是haskell的新手,所以我写==
如下。
(==) :: Day -> Day -> Bool
Monday == Monday = True
Tuesday == Tuesday = True
Wednesday == Wednesday = True
...
x == y = False
有没有更短的方法来编写==
实现?
您可以使用以下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
你可以写
data Day = Monday | Tuesday | Wednesday | Thursday | Friday
deriving Eq
这意味着 GHC 将自动为 Day 生成一个 Eq 实例。它将生成 (==) 使得Monday == Monday
, Tuesday == Tuesday
is True
etc, 但是Monday == Friday
是False
请注意,您不能写类似
(==) :: Day -> Day -> Bool
x == x = True
x == y = False
这也许就是你所想的。
如果你尝试,GHC 会抱怨 x 的定义冲突。