gpt4 book ai didi

haskell - 我对 Haskell 的 "deriving"有什么期望?

转载 作者:行者123 更新时间:2023-12-04 05:06:32 24 4
gpt4 key购买 nike

提前为初学者问题道歉,但我一直在努力寻找有用的信息。我正在研究“Learn You Haskell for Great Good”,并试图理解派生关键字,这似乎是 Java 的实现,但由于类别理论之类的东西,它应该具有很酷的自动代码生成。我为 2 向量声明了一个数据结构,例如

data R2 = R2 {x :: Double, y :: Double} deriving (Show)

然后我可以用它来做类似的事情
show (R2 1.0 2.0)

现在我想做的是向量加法和标量乘法,比如
(2.0 * (R2 1.0 2.0)) + (R2 3.0 4.0)

但是当我尝试
Prelude> data R2 = R2 { x :: Double, y :: Double} deriving (Num,Show)
<interactive>:3:52:
Can't make a derived instance of `Num R2':
`Num' is not a derivable class
In the data declaration for `R2'

所以编译器想出了如何显示原始类型的笛卡尔积,但是加法太难了?也许 Num 不是派生的正确类型类?多久可以期望派生一个类型类并在没有额外工作的情况下获得工作代码,例如我如何不必编写自己的 show 函数?

非常感谢,

约翰

最佳答案

trying to understand the deriving keyword, which seems like Java's implements but supposedly with cool automatic code generation


instance有点像 implements ,因为您声明类型是类型类的实例,然后编写实现。 deriving都是关于这些实现的酷自动生成(尽管它确实包含 instance )。

How often can one expect to derive a type class and get working code without additional work, like how I didn't have to write my own show function?



Alexey Romanov 的回答涵盖了哪些类(class) deriving作品。还有另一种自动生成实例的方法:使用泛型。从鸟瞰的角度来看,它是这样工作的:你描述一个泛型类型的实例应该是什么样子,然后,对于任何你想要实例的类型,派生 Generic并添加一个空的(即没有实现,因为它们将自动生成) instance宣言。一些库,如 aesonbinary offer generic instances ready to use , 你当然可以 roll your own为您的类(class)。

关于haskell - 我对 Haskell 的 "deriving"有什么期望?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31915177/

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