data Weekday = Mon | Tue | Wed | Thu | Fri | Sat | Sun
如何在不使用deriving Eq
我是否必须为每一种可能性声明它,如:
instance Eq Weekday where
Mon == Mon = True
Mon == _ = False
_ == Mon = False
Tue == Tue = True
... == ... = ..
还是有更聪明的解决方案吗?
答案 0 :(得分:9)
除非您想要使用模板Haskell或GHC的派生机制,否则它本质上就是这样。
instance Eq Weekday where
Mon == Mon = True
Tue == Tue = True
Wed == Wed = True
Thu == Thu = True
Fri == Fri = True
Sat == Sat = True
Sun == Sun = True
_ == _ = False
答案 1 :(得分:1)
可能不是你想要的,但在这种情况下你可以用Enum来定义Eq。例如:
data Weekday = Mon | Tue | Wed | Thu | Fri | Sat | Sun
instance Eq Weekday where
a == b = fromEnum a == fromEnum b
Enum实例可以派生,deriving (Enum)
,或者你再一次必须做出一个相当冗长的实例声明,就像Fraser所展示的那样。