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

时间:2019-12-15 21:17:58

标签: haskell typeclass

我已经创建了一个数据类型,需要使用instance使其成为相等类型类的一个实例。我的数据类型由值R a b组成。如果R x y等于R c d并且x等于c,我想使y等于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类型类中。我不知道如何解决这个问题。

1 个答案:

答案 0 :(得分:5)

鉴于您可以检查 [,1] [,2] [1,] 7 1 [2,] 6 1 [3,] 6 1 [4,] 1 1 [5,] 1 1 [6,] 1 1 [7,] 1 1 [8,] 2 1 [9,] 2 1 [10,] 3 1 [11,] 1 1 [12,] 1 1 [13,] 3 1 [14,] 3 1 [15,] 2 1 R a b的项目是否相等,因此您只能检查两个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 b