定义自己的实例类

1 haskell class instance

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

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

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

我试过这样的:

instance Ord a => Ord (Breakfast) where
 compare (Egg) (Sausage 2) = EQ 
 ...
Run Code Online (Sandbox Code Playgroud)

但我得到错误:变量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
Run Code Online (Sandbox Code Playgroud)

希望你们能帮助我什么是错的.我对Haskell很新.谢谢

tho*_*ron 5

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

instance Ord Breakfast where
  compare (Egg) (Sausage 2) = EQ 
  ...
Run Code Online (Sandbox Code Playgroud)

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