Haskell为导入的数据类型派生了其他实例

时间:2011-04-30 10:26:39

标签: haskell import types typeclass

我对Haskell比较陌生。我写了一个卡片游戏uno的克隆,我想要一张漂亮的卡片输出。我做了

import System.Console.ANSI

提供

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

现在我想添加deriving(Ord,Eq),我可以在导入包的源文件中写这个,但应该有一个更简单的方法来做到这一点。 我不知道谷歌要用什么关键词或在书中寻找什么。

1 个答案:

答案 0 :(得分:4)

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

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

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

说明:fromEnumEnum上的一个函数,它返回intBlack -> 0Red -> 1等)。整数显然是可比较和有序的。

编辑:@ rampion的版本在评论中显然更漂亮:

instance Eq Color where
  (==)  =  (==) `on` fromEnum

instance Ord Color where
  compare  =  compare `on` fromEnum