这两个在GHC中有什么不同。它们似乎在预期目的上相似,但deriving (Data)已经存在了一段时间,而deriving (Generic)只是最近才被添加到GHC中。
deriving (Generic)基本上是对deriving (Data)的“升级”,还是这两个类有不同的用途?
发布于 2014-09-29 13:05:07
我几乎不愿回答这个问题,因为我自己也只是略知一二,但大约一年前,我确实花了几天时间研究这个问题,这是我目前的理解……
这两个类都用于自省...使用它们,您可以访问( Haskell程序本身的) Haskell代码parsetrees。
然而,从哲学上讲,他们这样做的方式是不同的。
泛型( runtime.
从我有限的使用情况来看,“派生(数据)”使用起来要简单得多,但在运行时当然不是那么流畅(....for me这可以忽略不计)。
虽然“派生(泛型)”在理论上更快,但它更难编程,并且涉及到创建可以操作类型组(即与parsetrees相关的类)的类。它也可能促使你使用尖端的GHC扩展。
我的观点--“派生(泛型)”是做事情的“正确”方式,但需要更长的时间才能掌握。
模板Haskell是访问Haskell parsetrees的另一种方式,尽管它在编译时100%有效,并且有一些工具可以让你创建解析树数据并将其插入到代码中(即生成代码的代码,就像Lisp宏)。
我再强调一次,这一切都是基于几天的研究,所以如果我做得太糟糕了,有人会告诉我(我自己想巩固我的理解)。
https://stackoverflow.com/questions/26092219
复制相似问题