这两者在GHC中的区别是什么。它们在预期目的上似乎相似,但deriving (Data)
已存在一段时间,但deriving (Generic)
最近才被添加到GHC。
deriving (Generic)
基本上是"升级"到deriving (Data)
或两个类有不同的目的吗?
答案 0 :(得分:1)
我几乎毫不犹豫地回答这个问题,因为我自己只是稍微了解一下,但是大约一年前我确实花了几天时间看这个,这是我目前的理解....
这两个类都用于内省....使用它们,您可以访问Haskell代码解析器(Haskell程序本身)。
然而,哲学上,他们这样做的方式不同。
derived(Data)创建数据对象,表示可在运行时操作的已解析对象树。
derived(Generic)创建对应于每个parsetree的新类型,通常可以在编译时进行操作(在运行时完成的工作量较少)。
从我有限的用法来看,“派生(数据)”使用起来要简单得多,但当然在运行时并不那么圆滑(对我而言......这是可以忽略的)。
尽管“推导(通用)”在理论上更快,但编程更为棘手,并且涉及创建可以操纵类型组(即相关的分析树)的类。它也可能会促使您使用尖端的GHC扩展。
我的观点 - “衍生(通用)”是做事的“正确”方式,但需要更长时间才能掌握。
模板Haskell是另一种访问Haskell分析树的方法,虽然它在编译时100%工作,并且有工具让你创建和插入解析树数据到代码中(即生成代码的代码,如Lisp宏)。
再一次,让我强调这一切都是基于几天的研究,所以如果我把这种情况严重损坏,有人让我知道(我自己想要坚定我的理解)。