我很难为我的数据类型创建自己的实例。 我定义了一个类型:
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很新。感谢
答案 0 :(得分:5)
只需删除实例定义上的约束:
instance Ord Breakfast where
compare (Egg) (Sausage 2) = EQ
...
你对类型变量a
有一个约束,它没有在右侧(实例头)使用。