在 Haskell 中使用派生实例时,是否可以为任意类型派生函数,或者我们是否仅限于特定函数?
问问题
1313 次
4 回答
10
您可以在 haskell 98 中派生以下类的实例:Eq、Ord、Enum、Ix、Bounded、Read 和 Show。
使用 ghc 扩展,您还可以派生以下类的实例:Typeable、Data、Functor、Foldable 和 Traversable。还有一个 ghc 扩展允许新类型从其实现类型派生实例。
您不能派生任意类的实例,原因很简单,如果没有有关类的特殊知识,haskell 将不知道如何生成必要的函数。
于 2010-03-13T01:23:18.610 回答
6
就编译器知道如何为您派生而言,您仅限于特定的类。如果您知道为特定类型生成函数实现的一般方法,则可以使用预处理器或 Template Haskell 自己编写新的派生机制。
于 2010-03-13T03:29:44.370 回答
6
另外两个答案是正确的。但是如果你需要更多,有一些关于 hackage 的包可以处理更多。我非常喜欢Data.Derive,因为您可以直接生成源代码(为了兼容性)或将其挂接到 Template Haskell 以在编译时执行。已经支持广泛的类,并且很容易添加对您自己的支持。摘要:为一个该死的好图书馆做广告:-)
于 2010-03-13T18:55:08.440 回答