【发布时间】:2016-03-21 09:42:01
【问题描述】:
有没有办法让编译器派生我手动编写的功能:
instance Class c => Class (Trans c) where
foo1 = lift foo1
foo2 = lift foo2
...
foo999 = lift foo999
bar1 = \a b c -> lift $ bar1 a b c
...
baz1 = lift . baz1
...
即当一类Class 被包裹在Trans 中时,是否可以自动为Trans 获得Class 的免费实例,而无需进行繁重的工作:)?
【问题讨论】:
-
我不确定我是否理解您真正想要的。该实例将适用于所有
c,因此您只需编写一次。在一般情况下,我认为它不能再短了。 -
但是这个实例很无聊(它只是提升了所有功能),也许可以简洁地写这个(不必枚举所有
fooX = lift fooX等) -
我明白了,但是任何替代方案(例如 Template Haskell)看起来都更糟,除非你真的有大量的类方法。
-
如果你有足够的类方法来证明 Template Haskell 的合理性,你应该考虑重新设计你的类。
-
我不确定我是否遵循这个;你在找
GeneralizedNewtypeDeriving吗? downloads.haskell.org/~ghc/7.8.4/docs/html/users_guide/…
标签: haskell typeclass deriving