定义自己的实例 类
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
有约束。
我很难为我的数据类型创建自己的实例。 我定义了一个类型:
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
有约束。