对于任何 .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/