我想定义继承Eq类的新类PersonOP。 我的意思是我有一个数据类型
data Person a = {name:a,age:Int}
我想创建一个类似
的类 class (Eq a)=> PersonOp a where
然后像这样制作实例
instance PersonOp (Person a) where
(Person a)==(Person a) = equality (Person a) (Person a)
当我实现类似
的东西时 (==)::a->a->Bool
x==y = not (x/=y)
我收到错误我该如何解决?
答案 0 :(得分:12)
为您的人类派生平等是最简单的:
data Person a = Person {name::a, age::Int}
deriving Eq
这样你就可以了
*Main> Person "James" 53 == Person "Fred" 23
False
*Main> Person "James" 53 == Person "James" 53
True
这会根据==
的{{1}}为Person a
自动创建==
个功能。
在haskell中,a
是==
类的成员。您只能通过创建Eq
类的实例来定义==
,如果您尝试另外定义它,则会出现错误。
使它成为类的一部分使您可以轻松地定义适合您的数据类型的相等性。
您可以自己定义,而不是派生Eq
,例如:
Eq
答案 1 :(得分:-2)
我找到了答案
import Prelude hiding ((==))
data Person a = {name:a,age:Int}
class PersonOp a where
(==)::a->a->Bool
instance PersonOp (Person a) where
(Person a)==(Person a) = equality (Person a) (Person a)