我应该使用GHC Haskell扩展吗?

当我学习Haskell时,我发现在现实生活中有很多语言扩展的代码。 作为初学者,我应该学会使用它们,还是应该不惜一切代价避免它们? 我发现它打破了与Haskell 98的兼容性,并将代码限制在几乎GHC。 但是,如果我在Hackage上浏览软件包,我发现其中大部分都只是GHC。

那么,社区对使用语言扩展的态度是什么呢?

如果扩展的使用是好的,那么我怎样才能从那些大部分是“实验性的”中区分出可以“安全地”使用的扩展(可能成为下一个哈斯克尔标准的一部分)? 例如,我想-XDisambiguateRecordFields是好的和有用的,但它是否有可能在未来的支持?

有一些GHC扩展是太好,没有生活。 我最喜欢的是

  • 多参数types类
  • 作用域typesvariables
  • 更高级的types
  • 广义代数数据types(GADT)

其中最重要的是多参数types类。

一些GHC扩展是非常具有推测性和实验性的,你可能要谨慎使用。 确定一个稳定可信的扩展的一个好方法就是看它是否被包含在希望成为Haskell 98的后继者的Haskell Prime中 。

我第二个唐·斯图尔特的build议是,每个扩展应该使用源文件中的LANGUAGE杂注来标记。 不要使用命令行选项启用扩展。

是的,适当地使用扩展。

但是一定要有意识地启用它们 – 只有当你决定需要它们的时候。 (例如)通过{-# LANGUAGE Rank2Types #-}以模块为单位进行操作。

一般来说,人们确实使用GHC扩展,因为它们非常有用,而且Haskell 98已经很老了。 一旦有更新的标准,人们可能会更加努力地坚持下去。

您可以在这里find下一个标准提案的状态。

这里的其他答案是好的。 我想补充说的是,GHC扩展并不像未来那样脆弱(*),因为GHC似乎是最受欢迎的Haskell编译器,而且我也没有看到即将发生的变化。

(*)与“面向未来的”相反,