haskell - 在 cabalized 项目中指定扩展的约定

标签 haskell ghc cabal language-extension

对于任何 .hs 文件,您可以指定您依赖的语言扩展名,如下所示:

{-# LANGUAGE Foo, Bar, Baz #-}

cabalized 项目还可以在 .cabal 文件中为每个项目指定语言扩展:
extensions: Foo, Bar, Baz

哪些被认为是“最佳实践”?是否应该在 .cabal 文件中列出所有使用的扩展,以记录您的包与哪些编译器兼容?还是应该在每个文件的基础上记录所有扩展名,以便明确哪些文件依赖于哪些扩展名?在这两个地方广泛记录呢?还是介于两者之间的最佳实践?

最佳答案

这取决于它们的使用量。如果你在项目的每个模块中都使用了扩展,你可能想把它放在你的 cabal 文件中;例如,如果你在任何地方都使用 C 预处理器指令,那么将 CPP 放入才有意义。在您的 extensions字段而不是一遍又一遍地列出它,并且如果您的模块中有很多复杂的实例声明,则放置 FlexibleInstances 可能是合理的。也在那里。

但是“危险”扩展名(如 UndecidableInstances )和仅在少数地方使用的扩展名应该放在文件的顶部:前者用于文档(即“这里是龙”),后者用于文档并保存扩展的效果被隔离,因此您不会在另一个模块中不打算使用扩展的效果。

一般来说,我宁愿把它们放在文件的顶部,并且只使用 extensions一遍又一遍地指定扩展名时的字段会很烦人。

关于haskell - 在 cabalized 项目中指定扩展的约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9541107/

相关文章:

haskell - 为什么在 Haskell 的镜头库中同时具有 itraverse 和 itraversed 函数?

haskell - 为什么 cabal 不能动态构建 mighttpd2?

windows - 构建数据默认包的奇怪错误

haskell - 分区可以应用于 `a -> IO Bool` 吗?

algorithm - 检查数值约束表达式的允许值的等价性/子集

haskell - Haskell 中的并发 : What if single thread but set +RTS -N

已安装但未找到 Haskell 包

haskell - 什么是 Cabal 组件以及如何使用它们?

haskell - 获取 Haskell 记录的字段名称作为字符串列表?

windows - 使用最新 Haskell 平台 (2014.2.0.0) 的 Windows 中的 cabal 1.18.1.3 错误