我应该使用新的Haskell语言扩展来支持旧的吗?

Pet*_*lák 15 language-features haskell functional-programming

在启动一个新的Haskell项目时,它需要新旧扩展提供的语言功能,我应该使用哪些?新的还是旧的?例如:

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

更新:如答案/评论中所述,上述"取代"关系并不完全准确.但是,我对(经常发生的)案例感兴趣,因为几个扩展可以很好地完成任务.

Don*_*art 13

"supersede"在这里很模糊.

对于具有与其他功能重叠的语义的语言功能,我们可以识别以下几种情况:

  • 一些功能概括了现有的功能
  • 一些提供替代方法

在更一般的特征的情况下,存在风险和益处.一般性可以影响语言的许多其他部分,或受到限制.在后者中,选择一般情况.

如果它是替代方法之间的选择,没有严格的排序,例如FD或AT,那么提供一般建议就更难了.

因此,总而言之,"不",当谈到语言特征时,没有明显的理由在"旧"事物上使用"新"事物.他们不那样排序.


And*_*ewC 5

简而言之,是的,并且由于您所说的原因:更清洁,更清晰.

偶尔我会遇到这样一个地方,那里有一个类更好地表达为具有功能依赖性的多参数类型类,因为你可以更简单地获得更多的参数化,但通常一个相关的类型族更清晰,更灵活地表达它.类型族对于函数式程序员而言比函数式依赖性更直观.

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

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