Class 定义自己的实例类
我很难为我的数据类型创建自己的实例。 我定义了如下类型:Class 定义自己的实例类,class,haskell,instance,Class,Haskell,Instance,我很难为我的数据类型创建自己的实例。 我定义了如下类型: data早餐=鸡蛋|香肠Int |面包早餐衍生(Eq,Show) 并希望它是Ord类的一个实例。我想用一些规则来比较,比如:一个鸡蛋相当于两条香肠等等 我这样试过: instance Ord a => Ord (Breakfast) where compare (Egg) (Sausage 2) = EQ ... 但我得到了一个错误: 变量a的出现频率高于实例头。 我尝试了另一个例子,效果很好: data Down a =
data早餐=鸡蛋|香肠Int |面包早餐衍生(Eq,Show)
并希望它是Ord类的一个实例。我想用一些规则来比较,比如:一个鸡蛋相当于两条香肠等等
我这样试过:
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
希望你们能帮我解决问题。我对哈斯克尔很陌生。谢谢只需删除实例定义上的约束:
instance Ord Breakfast where
compare (Egg) (Sausage 2) = EQ
...
您对一个类型变量
a
有一个约束,该变量未在右侧(实例头)使用。只需删除实例定义上的约束:
instance Ord Breakfast where
compare (Egg) (Sausage 2) = EQ
...
您对一个类型变量
a
有一个约束,该变量未在右侧(实例头)使用。ok它可以工作。非常感谢。但是我认为如果一个类已经存在,并且您希望自己的类型成为typeclass的一部分,那么您必须这样做?当您需要对某些类型变量实施一些约束时,您必须这样做。例如,在您的Ord(Down a)
实例中,如果您没有约束Ord a
,您将无法使用compare x y
,因为x
和y
属于a
类型。谢谢。现在它有意义了。最后一个问题是否适合你。我有compare(Egg)(香肠2)=EQ
,这很好,现在我想要另一个模式,比如compare(香肠3)(Egg)=GT
,它在第二个“=”上得到一个解析错误。你知道为什么吗?不应该。检查缩进,你是对的。只是个账单什么的。非常感谢你!真的很感谢你的帮助好的。非常感谢。但是我认为如果一个类已经存在,并且您希望自己的类型成为typeclass的一部分,那么您必须这样做?当您需要对某些类型变量实施一些约束时,您必须这样做。例如,在您的Ord(Down a)
实例中,如果您没有约束Ord a
,您将无法使用compare x y
,因为x
和y
属于a
类型。谢谢。现在它有意义了。最后一个问题是否适合你。我有compare(Egg)(香肠2)=EQ
,这很好,现在我想要另一个模式,比如compare(香肠3)(Egg)=GT
,它在第二个“=”上得到一个解析错误。你知道为什么吗?不应该。检查缩进,你是对的。只是个账单什么的。非常感谢你!非常感谢你的帮助