如何在默认情况下在项目范围内启用语言扩展/编译指示?

How to enable language extensions / pragmas project wide by default?

有没有办法将 {-# LANGUAGE <feature> #-} 编译指示放入:

文件,以避免在项目的每个 *.hs 文件中重复相同的头代码?

正如@user2407038 在评论中所说,您可以在 <project>.cabal 文件中使用 default-extensions 字段。

如果你想在项目的所有模块中都有 OverloadStringsGADTs,你会在你的 cabal 文件的相关部分列出它(即如果你想要它用于所有你的库文件,把它放在库中)。

例如:

-- <project>.cabal
...
library
  hs-source-dirs:       src
  default-extensions:   GADTs
                      , OverloadedStrings 
  ...

如果您使用 package.yaml 配置文件生成 <project>.cabal 文件,您也可以在此处指定此字段。

-- package.yaml
library:
  source-dirs: src
  default-extensions:
    - OverloadedStrings
    - GADTs
  exposed-modules:
    - MyModule
  ...

哇,这真烦人。 cabal 的错误消息字面意思是使用 'extensions:',但你必须使用 'default-extensions:'...