15

当开始一个新的 Haskell 项目时,它需要新旧扩展提供的语言特性,我应该使用哪个?新的还是旧的?例如:

我倾向于较新的,因为它们感觉更干净,并且以统一的方式为语言添加了更多功能。但是,较旧的编译器得到更多编译器的支持,它们在现有库中使用,并且可能在程序员中也更为人所知。

更新:如答案/评论中所述,上述“取代”关系并不完全准确。但是,我对(经常发生的)一个任务可以通过几个扩展同样好地完成的情况感兴趣。

4

2 回答 2

13

“取代”在这里非常模棱两可。

对于语义与其他特征重叠的语言特征,我们可以识别几种情况:

  • 一些特征概括了现有的
  • 有些提供替代方法

在更一般的特征的情况下,有风险和好处。通用性会影响语言的许多其他部分,或者受到限制。在后者中,选择一般情况。

如果是在没有严格顺序的替代方法之间进行选择,例如 FD 或 AT,则很难给出一般性建议。

所以,总而言之,“不”,当谈到语言特性时,没有明显的理由使用“新”事物而不是“旧”事物。他们不这样排序。

于 2012-11-16T20:56:34.517 回答
5

简而言之,是的,并且出于您所说的原因:更干净,更清晰。

偶尔我会遇到一个类更好地表示为具有功能依赖的多参数类型类的地方,因为您可以通过这种方式更简单地获得更多参数,但通常关联类型系列是一种更清晰、更灵活的表达方式. 对于函数式程序员来说,类型族比函数式依赖更直观。

GADT 的语法比存在量化更清晰、更清晰,概念障碍更少,并且很容易获得你想要的行为。

如果可以的话,我建议使用新的东西,如果有必要的话,使用旧的方法。这些可爱的新扩展可以做更高的配置。

于 2012-11-16T22:47:47.993 回答