Haskell作业中的类型构造函数问题
我已经创建了一个数据类型,需要使用实例将其作为equality typeclass的实例。我的数据类型由值R a b组成。如果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 我认
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)