gpt4 book ai didi

haskell - `deriving (Data)` 与 `deriving (Generic)`

转载 作者:行者123 更新时间:2023-12-03 14:58:28 27 4
gpt4 key购买 nike

这两者在 GHC 中有什么区别。它们的预期用途似乎相似,但 deriving (Data)已经存在了一段时间了deriving (Generic)最近才添加到 GHC 中。

deriving (Generic)基本上是“升级”到 deriving (Data)还是这两个类(class)有不同的目的?

最佳答案

我几乎犹豫要不要回答这个问题,因为我自己只是勉强理解它,但是大约一年前我确实花了几天时间自己看这个,这是我目前的理解....

这两个类都用于自省(introspection)......使用它们,您可以访问 Haskell 代码分析树(Haskell 程序本身的)。

然而,从哲学上讲,他们这样做的方式不同。

  • deriving (Data) 创建数据对象,这些对象表示可在运行时操作的已解析对象树。
  • 派生(通用)创建与每个分析树相对应的新类型,通常可以在编译时对其进行操作(在运行时要做的工作更少)。

  • 从我有限的用法来看,“派生(数据)”使用起来要简单得多,但在运行时当然没有那么流畅(....对我来说这可以忽略不计)。

    尽管“派生(通用)”在理论上更快,但它的编程更棘手,并且涉及创建可以操纵类型组(即相关分析树)的类。它还可能促使您使用最先进的 GHC 扩展。

    我的意见-“派生(通用)”是做事的“正确”方式,但需要更长的时间才能掌握。

    模板 Haskell 是访问 Haskell 分析树的另一种方法,尽管它在编译时 100% 工作,并且具有让您创建分析树数据并将其插入代码的工具(即生成代码的代码,如 Lisp 宏)。

    再次强调一下,这一切都是基于几天的研究,所以如果我把这个搞砸了,有人让我知道(我自己想加强我的理解)。

    关于haskell - `deriving (Data)` 与 `deriving (Generic)`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26092219/

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