首页 > 解决方案 > Haskell作业中类型构造函数的问题

问题描述

我已经创建了一个数据类型,并且需要使用实例将其设为相等类型类的实例。我的数据类型由值 R a b 组成。我想让R x y等于R c difx等于cy等于d

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

 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 类型类中。我不知道如何解决这个问题。

标签: haskelltypeclass

解决方案


您只能检查两个R a bs 是否相等,因为您可以检查a和的项目b是否相等。因此,您需要将这些添加为类型约束:

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

但是请注意,您不需要自己实现该Eq实例。如果您希望两个R a bs 在数据构造函数相同的情况下相同,并且它们对应的参数相同,那么您只需让编译器为您派生实例:

data Row a b = R a b deriving (Eq, Show)

推荐阅读