我对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)
说明:
fromEnum
是Enum
上的一个函数,返回int
(Black -> 0
,Red -> 1
等)。整数显然是相等可比较的且有序。编辑:@rampion的版本在注释中显然更漂亮:
instance Eq Color where
(==) = (==) `on` fromEnum
instance Ord Color where
compare = compare `on` fromEnum