定义自己的实例类

时间:2015-05-16 12:33:04

标签: class haskell instance

我很难为我的数据类型创建自己的实例。 我定义了一个类型:

data Breakfast = Egg | Sausage Int | Bread Breakfast deriving (Eq, Show)

并希望它成为Ord类的一个实例。我想通过一些规则来比较它:一个鸡蛋和2个香肠等一样好。

我试过这样:

instance Ord a => Ord (Breakfast) where
 compare (Egg) (Sausage 2) = EQ 
 ...

但我收到错误:  变量a比实例头更频繁地出现。 我尝试了另一个例子,这很好用:

data Down a = Down a deriving (Eq, Show, Read)

instance Ord a => Ord (Down a) where
 compare (Down x) (Down y) = y `compare` x

希望你们能帮我解决错误。我对Haskell很新。感谢

1 个答案:

答案 0 :(得分:5)

只需删除实例定义上的约束:

instance Ord Breakfast where
  compare (Egg) (Sausage 2) = EQ 
  ...

你对类型变量a有一个约束,它没有在右侧(实例头)使用。