我是否应该使用GHC Haskell扩展?
在我学习Haskell的过程中,我发现在现实生活中有很多代码是可以使用的。作为初学者,我应该学习使用它们,还是应该不惜一切代价避免它们?我发现它破坏了与Haskell 98的兼容性,并将代码限制为仅限于GHC。然而,如果我浏览Hackage上的软件包,我会发现它们中的大多数只是GHC而已 那么,社区对使用语言扩展持什么态度呢我是否应该使用GHC Haskell扩展?,haskell,ghc,Haskell,Ghc,在我学习Haskell的过程中,我发现在现实生活中有很多代码是可以使用的。作为初学者,我应该学习使用它们,还是应该不惜一切代价避免它们?我发现它破坏了与Haskell 98的兼容性,并将代码限制为仅限于GHC。然而,如果我浏览Hackage上的软件包,我会发现它们中的大多数只是GHC而已 那么,社区对使用语言扩展持什么态度呢 如果使用扩展是可以的,我如何区分那些我可以“安全”使用的扩展(那些可能成为下一个Haskell标准的一部分)和那些主要是“实验性”的扩展?例如,我认为这很好,也很有用,但它
如果使用扩展是可以的,我如何区分那些我可以“安全”使用的扩展(那些可能成为下一个Haskell标准的一部分)和那些主要是“实验性”的扩展?例如,我认为这很好,也很有用,但它将来可能会得到支持吗?一般来说,人们确实非常频繁地使用GHC扩展,因为它们非常有用,而且Haskell 98已经很旧了。一旦有了更先进的标准,人们可能会更加努力地坚持下去
您可以找到下一个标准的提案状态。是,根据需要使用扩展 但一定要有意识地启用它们——只有在您决定需要它们时才启用。
通过
{-#LANGUAGE Rank2Types#-}
(例如)在每个模块上执行此操作。有一些GHC扩展太好了,没有它们就无法生存。我最喜欢的是
- 多参数类型类
- 作用域类型变量
- 高级类型
- 广义代数数据类型(GADT)
我支持Stewart的建议,即每个扩展都应该在源文件中使用
语言pragma进行标记。不要使用命令行选项启用扩展。这里的其他答案都很好。我要补充的是,GHC扩展并不像它们可能那样容易受到攻击(*),因为GHC似乎是最流行的Haskell编译器,而且我看不到这种情况会很快改变
(*)与“未来证明”相反谢谢您的回答和链接。我想应该避免被拒绝的提案。嗯,被拒绝的原因可能相当广泛,所以如果你真的想用一些东西,请深入了解细节。但这是一个很好的经验法则。谢谢!我将避免使用命令行选项来启用扩展;GHC是如此之好,以至于它成为了主流——甚至对于那些拒绝服从主流的人来说也是如此(Haskellers)。