Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否应该使用GHC Haskell扩展?_Haskell_Ghc - Fatal编程技术网

我是否应该使用GHC Haskell扩展?

我是否应该使用GHC Haskell扩展?,haskell,ghc,Haskell,Ghc,在我学习Haskell的过程中,我发现在现实生活中有很多代码是可以使用的。作为初学者,我应该学习使用它们,还是应该不惜一切代价避免它们?我发现它破坏了与Haskell 98的兼容性,并将代码限制为仅限于GHC。然而,如果我浏览Hackage上的软件包,我会发现它们中的大多数只是GHC而已 那么,社区对使用语言扩展持什么态度呢 如果使用扩展是可以的,我如何区分那些我可以“安全”使用的扩展(那些可能成为下一个Haskell标准的一部分)和那些主要是“实验性”的扩展?例如,我认为这很好,也很有用,但它

在我学习Haskell的过程中,我发现在现实生活中有很多代码是可以使用的。作为初学者,我应该学习使用它们,还是应该不惜一切代价避免它们?我发现它破坏了与Haskell 98的兼容性,并将代码限制为仅限于GHC。然而,如果我浏览Hackage上的软件包,我会发现它们中的大多数只是GHC而已

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


如果使用扩展是可以的,我如何区分那些我可以“安全”使用的扩展(那些可能成为下一个Haskell标准的一部分)和那些主要是“实验性”的扩展?例如,我认为这很好,也很有用,但它将来可能会得到支持吗?

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


您可以找到下一个标准的提案状态。

是,根据需要使用扩展

但一定要有意识地启用它们——只有在您决定需要它们时才启用。
通过
{-#LANGUAGE Rank2Types#-}
(例如)在每个模块上执行此操作。

有一些GHC扩展太好了,没有它们就无法生存。我最喜欢的是

  • 多参数类型类
  • 作用域类型变量
  • 高级类型
  • 广义代数数据类型(GADT)
其中真正重要的是多参数类型的类

一些GHC扩展非常具有推测性和实验性,您可能需要谨慎使用。确定一个稳定且受信任的扩展的一个好方法是查看它是否计划包含在中,它有望成为Haskell 98的继承者


我支持Stewart的建议,即每个扩展都应该在源文件中使用
语言
pragma进行标记。不要使用命令行选项启用扩展。

这里的其他答案都很好。我要补充的是,GHC扩展并不像它们可能那样容易受到攻击(*),因为GHC似乎是最流行的Haskell编译器,而且我看不到这种情况会很快改变


(*)与“未来证明”相反

谢谢您的回答和链接。我想应该避免被拒绝的提案。嗯,被拒绝的原因可能相当广泛,所以如果你真的想用一些东西,请深入了解细节。但这是一个很好的经验法则。谢谢!我将避免使用命令行选项来启用扩展;GHC是如此之好,以至于它成为了主流——甚至对于那些拒绝服从主流的人来说也是如此(Haskellers)。