Haskell作业中的类型构造函数问题

Haskell作业中的类型构造函数问题,haskell,typeclass,Haskell,Typeclass,我已经创建了一个数据类型,需要使用实例将其作为equality typeclass的实例。我的数据类型由值R a b组成。如果x等于c并且y等于d,我想使rxy等于rd 这是我到目前为止编写的代码。它不编译 data Row a b = R a b deriving (Show) instance Eq (Row a b) where (R x y) == (R c d) = (x == c) && (y == d) _ == _ = False 我认

我已经创建了一个数据类型,需要使用实例将其作为equality typeclass的实例。我的数据类型由值R a b组成。如果
x
等于
c
并且
y
等于
d
,我想使
rxy
等于
rd

这是我到目前为止编写的代码。它不编译

 data Row a b = R a b deriving (Show)
 instance Eq (Row a b)  where
     (R x y) == (R c d) = (x == c) && (y == d)
     _ == _ = False

我认为这可能是错误的,因为类型a和b不一定必须在Equality类型类中。我不知道如何解决这个问题。

如果您可以检查
a
b
的项目是否相等,那么您只能检查两个
rab
是否相等。因此,您需要添加这些类型约束:

instance (Eq a, Eq b) => Eq (Row a b)  where
    (R x y) == (R c d) = (x == c) && (y == d)
    _ == _ = False

非常感谢。这些问题在家庭作业问题中有点含糊不清,我认为它被要求解决问题,就像你在评论的前半部分所做的那样。现在它按预期工作。遗憾的是,我还不能给你投票,因为我缺乏声誉。错误消息实际上建议了解决这个问题的方法:
可能的修复:将(Eq a)添加到实例声明的上下文[…]
。发布错误消息也是值得的,因为它们通常包含这样的有用信息。
data Row a b = R a b deriving (Eq, Show)