繁体   English   中英

具有代数数据类型的 Haskell 类型类

[英]Haskell typeclasses with algebraic data types

我有一些代数数据类型 A、B 和 C,每个都实现了 class:

class Dog a where
   dog :: a -> Bool

如果我创建一个新的代数数据类型:

data D = A | B | C

有没有一种简单的方法让 D 实现 Dog 而不必再次为 A、B 和 C 重新定义每个实例?

谢谢

在回答之前,我应该指出您可能陷入了初学者对 ADT 的常见误解。 请记住,Haskell 对于类型和术语级别有两个单独的命名空间。 所以如果我们写:

data A = Foo
data B = Bar
data C = Baz
data D = A | B | C

...那么类型A和类型D的构造函数A之间没有联系。 因此,我怀疑(但不完全确定!)您问的问题的类型D具有以下格式,而不是:

data D = A A | B B | C C

在这种情况下,简短的回答是“不”。 您可能希望您可以添加deriving Dog或类似的东西并完成,但该语言不提供该功能。 也就是说,有一些用于通用编程的包可能会有所帮助:只需检查 Hackage 包列表并搜索“deriv”,您将获得大约 10 个命中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM