如何为Stack项目设置条件依赖?

问题描述 投票:0回答:1

我正在尝试使我的基于 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所述)。

haskell haskell-stack
1个回答
0
投票

您的

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 将首先尝试使用默认标志值来满足依赖关系,然后,如果不可能,则使用否定值。 但是,如果该标志是手动的,则将使用默认值(可以通过命令行标志覆盖)。

© www.soinside.com 2019 - 2024. All rights reserved.