这两者在GHC中有什么区别.它们在预期目的上似乎相似,但deriving (Data)已经存在了一段时间,但deriving (Generic)最近才被添加到GHC中.
是deriving (Generic)基本上是一个"升级"到deriving (Data)或者做两个班有不同的用途?
我几乎犹豫要不要回答这个问题,因为我自己对它的了解也很少,但大约一年前我自己确实花了几天时间看这个问题,这是我目前的理解......
这两个类都用于内省......使用它们,您可以访问 Haskell 代码解析树(Haskell 程序本身)。
然而,从哲学上讲,他们这样做的方式有所不同。
deriving (Data) 创建数据对象,它表示可以在运行时操作的已解析对象树。
deriving (Generic) 创建与每个解析树相对应的新类型,这些新类型通常可以在编译时进行操作(在运行时需要完成的工作更少)。
从我有限的使用来看,“导出(数据)”使用起来更加简单,但当然在运行时并不那么流畅(......对我来说,这是可以忽略不计的)。
虽然“派生(通用)”理论上更快,但编程起来比较棘手,并且涉及创建可以操作类型组(即相关解析树)的类。它还可能会促使您使用最先进的 GHC 扩展。
我的观点-“派生(通用)”是做事的“正确”方式,但需要更长的时间来掌握。
Template Haskell 是访问 Haskell 解析树的另一种方法,尽管它在编译时可以 100% 工作,并且具有允许您创建解析树数据并将其插入到代码中的工具(即生成代码的代码,如 Lisp 宏)。
再次,让我强调一下,这都是基于几天的研究,所以如果我把这个搞得太严重了,有人让我知道(我自己想巩固我的理解)。
| 归档时间: |
|
| 查看次数: |
299 次 |
| 最近记录: |