【发布时间】:2012-11-05 12:48:39
【问题描述】:
当开始一个新的 Haskell 项目时,该项目需要新旧扩展提供的语言特性,我应该使用哪个?新的还是旧的?例如:
- GADTs 取代 ExistentialQuantification。
- TypeFamilies 在许多情况下会取代 FunctionalDependencies。
- 等。 (如果您有更多示例,请随时在此处添加)
我倾向于较新的,因为它们感觉更干净,并且以统一的方式为语言添加了更多功能。但是,较旧的编译器得到更多编译器的支持,它们在现有库中使用,并且可能在程序员中更为人所知。
更新: 如答案/cmets 中所述,上述“取代”关系并不完全准确。但是,我对(经常发生的)一个任务可以通过几个扩展同样好地完成的情况感兴趣。
【问题讨论】:
-
如果我错了,请纠正我,但 TypeFamilies 并没有完全取代 FunctionalDependencies(FD 允许重叠实例,因此递归)
-
@maxtaldykin 类型族可以有重叠的实例和递归。确实,它们不会取代功能依赖。但是原因很微妙。 this paper 的最后讨论了一点,但几乎是即兴评论,我不记得看到任何其他真实的例子试图制作一小段(可理解的=)代码可以'不能相互编码。
-
我担心这个问题并不能真正客观地回答......
-
@DanielWagner,TF 对重叠的支持有点有限,例如不可能同时拥有
instance F a和instance F (a->b) -
我担心这个问题的最后一段已经回答了这个问题
标签: haskell functional-programming language-features