定义自己的实例 类

Defining own instance classes

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

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

并希望它成为 class 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 很陌生。谢谢

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

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

您对右侧(实例头)未使用的类型变量 a 有约束。