Cha*_*ham 4 haskell typeclass algebraic-data-types
我有一些代数数据类型A,B和C各自实现类:
class Dog a where
dog :: a -> Bool
Run Code Online (Sandbox Code Playgroud)
如果我创建一个新的代数数据类型:
data D = A | B | C
Run Code Online (Sandbox Code Playgroud)
是否有一种简单的方法让D实现Dog而不必再次为A,B和C重新定义每个实例?
谢谢
在回答之前,我应该指出,你可能会陷入普通初学者对ADT的误解.请记住,Haskell有两个单独的名称空间用于类型和术语级别.所以,如果我们写:
data A = Foo
data B = Bar
data C = Baz
data D = A | B | C
Run Code Online (Sandbox Code Playgroud)
......再有就是类型之间没有连接A和构造A类型D.因此,我怀疑(但我不能完全确定!)这个问题你的意思要问有类型如下格式D,而不是:
data D = A A | B B | C C
Run Code Online (Sandbox Code Playgroud)
在这种情况下,简短的回答是"不".您可能希望您可以使用某种deriving Dog或类似的东西并完成,但该语言不提供该功能.也就是说,有一些通用编程的软件包可以提供帮助:只需查看Hackage软件包列表并搜索"deriv",你就会获得大约10次点击.
| 归档时间: |
|
| 查看次数: |
255 次 |
| 最近记录: |