gpt4 book ai didi

haskell - 如何继承Haskell中的Eq类?

转载 作者:行者123 更新时间:2023-12-02 21:06:50 26 4
gpt4 key购买 nike

我想定义继承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)

我遇到错误,如何修复它?

最佳答案

最简单的是为您的 person 类导出相等性:

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

这会根据 a== 自动为 Person a 创建一个 == 函数。

为什么

在 haskell 中,==Eq 类的成员。您只能通过创建 Eq 类的实例来定义 ==,如果您尝试以其他方式定义它,则会收到错误。

使其成为类的一部分,您可以轻松定义适合您的数据类型的相等性。

手动定义实例

您可以自己定义它,而不是派生 Eq,例如:

data Person a = Person {name::a, age::Int}

instance Eq a => Eq (Person a) where
someone == another = name someone == name another
&& age someone == age another

关于haskell - 如何继承Haskell中的Eq类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16109984/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com