我正在尝试使我的基于 Stack 的 Haskell 项目能够在用户需要时应用某个 GHC 插件。
我已经通过
-fplugin
成功添加了 ghc-options
标志。据我所知,我必须将插件包作为依赖项添加到我的 package.yaml
文件中。不过,我想配置项目,以便仅在用户需要时添加额外的依赖项(通过设置标志、环境变量或其他方式)。
我尝试使用
when
中的 package.yaml
关键字来有条件地启用依赖项:
when:
- condition: flag(useplugin)
then:
dependencies: [ myplugin ]
else:
dependencies: []
然而,这会导致来自阴谋集团的错误:
- 0:0: These flags are used without having been defined: myplugin
我找不到
package.yaml
的选项,它将在生成的 cabal 文件中生成标志定义(如here所述)。
您的
package.yaml
文件需要有一个根级别 flags
字段,它描述了可用的标志。
例如:
flags:
development:
description: Development or production build
manual: True
default: False
fast:
manual: True
default: False
manual
和 default
是 hpack
所必需的。
manual
字段在Cabal文档中进行了描述:
手册:
boolean
默认值:False
从:1.6
默认情况下,Cabal 将首先尝试使用默认标志值来满足依赖关系,然后,如果不可能,则使用否定值。 但是,如果该标志是手动的,则将使用默认值(可以通过命令行标志覆盖)。