我对Haskell比较陌生。我写了一个卡片游戏uno的克隆,我想要一张漂亮的卡片输出。我做了
import System.Console.ANSI
提供
data Color = Black
| Red
| Green
| Yellow
| Blue
| Magenta
| Cyan
| White
deriving (Bounded, Enum, Show)
现在我想添加deriving(Ord,Eq),我可以在导入包的源文件中写这个,但应该有一个更简单的方法来做到这一点。 我不知道谷歌要用什么关键词或在书中寻找什么。
答案 0 :(得分:4)
无需编辑库。在源文件中,声明:
instance Eq Color where
x == y = fromEnum x == fromEnum y
instance Ord Color where
compare x y = compare (fromEnum x) (fromEnum y)
说明:fromEnum
是Enum
上的一个函数,它返回int
(Black -> 0
,Red -> 1
等)。整数显然是可比较和有序的。
编辑:@ rampion的版本在评论中显然更漂亮:
instance Eq Color where
(==) = (==) `on` fromEnum
instance Ord Color where
compare = compare `on` fromEnum