Stack无法解决隐藏的问题。依赖

时间:2017-09-22 01:46:30

标签: haskell haskell-stack

我正在研究我的第一个主要Haskell应用程序,并希望添加嘲弄来创建一次性测试WAI线程。导入mock并运行stack test会导致编译错误:

Failed to load interface for ‘Test.Mockery.Directory’
It is a member of the hidden package ‘mockery-0.3.5’.
Perhaps you need to add ‘mockery’ to the build-depends in your .cabal file.
Use -v to see a list of the files searched for.

所以,我在测试依赖项下添加了对我的cabal文件的嘲弄。但是,当我运行stack buildstack test时,会自动从cabal文件中删除。

我还尝试在mockery-0.3.5文件的extra-deps下列出stack.yaml。这并不令人惊讶,因为嘲弄是我的一部分,而额外的deps则适用于lts之外的包裹。

如何让堆栈识别出应该将mockry作为依赖项包含在项目中?

这是我的stack.yaml:

flags: {}
ghc-options:
  ! '*': -Wall
packages:
- .
extra-deps: [
]

resolver: lts-9.5

我正在使用堆栈版本1.5.1

我认为这是一个愚蠢的构建问题,并期待面对我明显的疏忽。

1 个答案:

答案 0 :(得分:0)

stack.yaml中,您声明了Stackage LTS版本,这是您希望依赖的黑客依赖关系的精选列表。您还可以依赖于本地软件包和git中不在Hackage中的软件包。您也可以在LTS中更改软件包的版本,只要它们遵守其他依赖项的约束即可。

package.yaml是构建文件。您想要直接在Haskell代码中直接导入的所有程序包都必须在此处声明为依赖项,即使它们已在stack.yaml中明确声明。

最后,当您看到It is a member of the hidden package时,这意味着您的一个依赖项正在使用该程序包,但在构建文件中未将其声明为依赖项。