我创建了一个数据类型,需要使用 instance 使其成为相等类型类的实例。我的数据类型由值 R a b 组成。我想使R x y等于R c dif xis equal toc和yis equal to 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
Run Code Online (Sandbox Code Playgroud)
我认为这可能是错误的,因为类型 a 和 b 不一定必须在 Equality 类型类中。我不知道如何解决这个问题。
您只能检查两个R a b,S是平等的给你可以检查的项目a和b相等。因此,您需要将这些添加为类型约束:
instance (Eq a, Eq b) => Eq (Row a b) where
(R x y) == (R c d) = (x == c) && (y == d)
_ == _ = FalseRun Code Online (Sandbox Code Playgroud)
但是请注意,你不会需要实现Eq自己的实例。如果您希望两个R a bs 相同,并且数据构造函数相同,并且它们对应的参数相同,那么您只需让编译器为您的实例派生:
data Row a b = R a b deriving (Eq, Show)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |