[英]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.