代码之家  ›  专栏  ›  技术社区  ›  sastanin

我是否应该使用ghc haskell扩展?

  •  75
  • sastanin  · 技术社区  · 15 年前

    当我学习哈斯克尔时,我发现 language extensions 在现实生活代码中使用。作为一个初学者,我应该学会使用它们,还是应该不惜一切代价避免它们?我看到它破坏了与haskell 98的兼容性,并且只将代码限制在相当多的GHC范围内。但是,如果我在Hackage上浏览软件包,我会发现它们中的大多数都只是GHC。

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

    如果扩展的使用是可以的,我如何区分我可以安全使用的扩展(那些可能成为下一个haskell标准的一部分的扩展)和那些大部分是实验性的扩展?例如,我想 -XDisambiguateRecordFields 是好的和有用的,但它有可能在未来得到支持吗?

    4 回复  |  直到 9 年前
        1
  •  69
  •   Norman Ramsey    15 年前

    有一些GHC扩展太好了,没有它就活不下去。我最喜欢的是

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

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

    一些GHC扩展非常具有投机性和实验性,您可能希望谨慎使用。确定一个稳定可靠的扩展的一个好方法是查看它是否被列入 Haskell Prime 希望成为哈斯克尔98的继任者。

    我赞同Stewart的建议,即每个扩展名都应使用 LANGUAGE 源文件中的pragma。 不要 使用命令行选项启用扩展。

        2
  •  51
  •   Johannes Weiss    9 年前

    是的,根据需要使用扩展。

    但一定要启用它们 故意 --只有当你决定需要它们的时候。 在每个模块的基础上通过 {-# LANGUAGE Rank2Types #-} (例如)。

        3
  •  19
  •   Ganesh Sittampalam    15 年前

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

    您可以找到下一个标准的建议状态 here .

        4
  •  4
  •   Phil Darnowsky    11 年前

    这里的其他答案都很好。我要补充的是,ghc扩展并不像它们将来那样容易受到攻击,因为ghc似乎是最受欢迎的haskell编译器,而且我不认为这种情况很快会改变。

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