我对Haskell比较陌生。我写了一个纸牌游戏uno的克隆,我想要彩色的纸牌输出。我做

import System.Console.ANSI

提供
data Color = Black
           | Red
           | Green
           | Yellow
           | Blue
           | Magenta
           | Cyan
           | White
           deriving (Bounded, Enum, Show)

现在我也想添加派生(Ord,Eq),我可以在导入包的源文件中编写它,但是应该有一个更简单的方法。
我不知道谷歌寻找或寻找书中的关键字。

最佳答案

无需编辑库。在您的源文件中,声明:

instance Eq Color where
  x == y  =  fromEnum x == fromEnum y

instance Ord Color where
  compare x y  =  compare (fromEnum x) (fromEnum y)

说明:fromEnumEnum上的一个函数,返回int(Black -> 0Red -> 1等)。整数显然是相等可比较的且有序。

编辑:@rampion的版本在注释中显然更漂亮:
instance Eq Color where
  (==)  =  (==) `on` fromEnum

instance Ord Color where
  compare  =  compare `on` fromEnum

08-19 20:02