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

标签 haskell ghc

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

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

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

最佳答案

有一些 GHC 扩展是非常好用的。我最喜欢的是

  • 多参数类型类
  • 作用域类型变量
  • 更高级别的类型
  • 广义代数数据类型 (GADT)

其中真正重要的是多参数类型类。

某些 GHC 扩展具有很强的推测性和实验性,您可能需要谨慎使用。识别稳定且可信的扩展的一个好方法是查看它是否计划包含在 Haskell Prime 中。 ,有望成为 Haskell 98 的后继者。

我同意 Don Stewart 的建议,即每个扩展名都应在源文件中使用 LANGUAGE 编译指示进行标记。 不要使用命令行选项启用扩展。

关于haskell - 我是否应该使用 GHC Haskell 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/801785/

相关文章:

haskell - 有没有办法只将 Haskell 源代码编译为接口(interface)文件,而不是进一步编译?

haskell - 为 GHC 指定源目录的问题

haskell - 定义一个函数时不使用任何语言扩展,但必须使用语言扩展来声明其类型?

haskell - 多次重复 monadic 计算并打印出结果? (MonadRandom)

haskell - 将 GHC 与 NVCC 一起使用

haskell - 尾位置上下文 GHC 连接点论文是如何形成的?

haskell - 为什么 GHC.Types.Any 在这里?

haskell - 当省略 "forall"时,它们真的会自动插入到语句之前吗?

haskell - 应用程序在 futex() 调用时卡住

haskell - 数组索引触发元素的重复评估?