7

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

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

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

extensions: Foo, Bar, Baz

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

4

2 回答 2

7

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

但是“危险”UndecidableInstances的扩展名(如扩展是隔离的,因此您不会意外地在另一个模块中不打算使用扩展的效果。

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

于 2012-03-02T22:47:57.380 回答
0

好的,问题和答案都很古老。所以我对扩展的状态做了一些更新。如果您在很多模块中使用了一些无害的语言扩展(如-XRecordWildCards, -XDeriveDataTypeable, ),或者发现将pragma 放在顶层很烦人(因为您可能不知道某些允许您自动放置语言 pragma 的 IDE 或工具)那么你应该使用字段。请注意,在我看来,还有一个非常令人困惑的字段,永远不应该使用。请参阅此处的示例-XTypeVariables{-# LANGUAGE ... #-}default-extensions:other-extensions:

于 2017-06-03T16:58:53.930 回答