首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >`派生(Data)` vs `派生(泛型)`

`派生(Data)` vs `派生(泛型)`
EN

Stack Overflow用户
提问于 2014-09-29 11:44:00
回答 1查看 361关注 0票数 6

这两个在GHC中有什么不同。它们似乎在预期目的上相似,但deriving (Data)已经存在了一段时间,而deriving (Generic)只是最近才被添加到GHC中。

deriving (Generic)基本上是对deriving (Data)的“升级”,还是这两个类有不同的用途?

EN

回答 1

Stack Overflow用户

发布于 2014-09-29 13:05:07

我几乎不愿回答这个问题,因为我自己也只是略知一二,但大约一年前,我确实花了几天时间研究这个问题,这是我目前的理解……

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

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

泛型( runtime.

  • deriving )派生(
  1. deriving )创建数据对象,这些数据对象表示可以在runtime.
  2. deriving(泛型)操作的对象的解析树创建与每个语法分析树相对应的新类型,这些新类型通常可以在编译时进行操作(使得在运行时要做的工作更少)。

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

虽然“派生(泛型)”在理论上更快,但它更难编程,并且涉及到创建可以操作类型组(即与parsetrees相关的类)的类。它也可能促使你使用尖端的GHC扩展。

我的观点--“派生(泛型)”是做事情的“正确”方式,但需要更长的时间才能掌握。

模板Haskell是访问Haskell parsetrees的另一种方式,尽管它在编译时100%有效,并且有一些工具可以让你创建解析树数据并将其插入到代码中(即生成代码的代码,就像Lisp宏)。

我再强调一次,这一切都是基于几天的研究,所以如果我做得太糟糕了,有人会告诉我(我自己想巩固我的理解)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26092219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档