当我正在学习Haskell时,我发现在现实生活中的代码中使用了很多language extensions。作为初学者,我应该学会使用它们,还是应该不惜一切代价避免使用它们?我看到它破坏了与Haskell 98的兼容性,并且仅将代码限制为几乎GHC。但是,如果我在Hackage上浏览软件包,我发现大多数软件包都是GHC版本。
那么,社区对使用语言扩展的态度是什么?
如果扩展的使用是正常的,那么如何区分我可以“安全地”使用的扩展(那些可能成为下一个Haskell标准的一部分的扩展)与那些主要是“实验性”的扩展?例如,我认为-XDisambiguateRecordFields很好用,但未来很可能会得到支持吗?
答案 0 :(得分:71)
有一些GHC扩展太好了,不能没有。我最喜欢的是
其中真正重要的是多参数类型。
某些GHC扩展非常具有推测性和实验性,您可能需要谨慎使用。识别稳定且可信的扩展的一种好方法是查看它是否包含在Haskell Prime中,希望它是Haskell 98的后继者。
我的第二个Don Stewart的建议是,应该使用源文件中的LANGUAGE
pragma标记每个扩展名。 不要使用命令行选项启用扩展。
答案 1 :(得分:51)
是的,请根据需要使用扩展程序。
但请确保只在您决定需要时才启用 。
通过{-# LANGUAGE Rank2Types #-}
(例如)在每个模块的基础上执行此操作。
答案 2 :(得分:19)
一般来说,人们确实大量使用GHC扩展,因为它们非常有用而且Haskell 98已经很老了。一旦有了更新的标准,人们可能会更加努力地坚持下去。
您可以找到下一个标准here的提案状态。
答案 3 :(得分:4)
这里的其他答案都很好。我想补充一点,GHC扩展并不像它们可能的那样具有未来的脆弱性(*),因为GHC似乎是最流行的Haskell编译器,我不认为它会很快发生变化。
(*)与“面向未来”相反