Stack:在开发过程中如何依赖包?

时间:2016-10-12 16:03:44

标签: haskell dependency-management cabal haskell-stack

如果发布到Hackage,我的应用程序中有一部分会更好。我仍然不知道它究竟会是什么样子,因此我需要在处理我的应用程序时对其进行许多更改。

在我的项目中创建一个模块并在那里进行迭代非常容易,但是我想将它放在自己的项目中,以便它可以拥有自己的依赖项。

如何在开发过程中让我的项目依赖于这个单独的包?它应该允许快速迭代。这是我到目前为止所做的:

# stack.yaml
packages:
- '.'
- location: ../amqp-worker

# my-application.cabal
library
  build-depends:
      base >= 4.7 && < 5
    , amqp-worker

但是我在构建时遇到错误:

$ stack build
cra-reporting-0.1.0.0: build

--  While building package cra-reporting-0.1.0.0 using:
      /Users/seanhess/.stack/setup-exe-cache/x86_64-osx/setup-Simple-Cabal-1.24.0.0-ghc-8.0.1 --builddir=.stack-work/dist/x86_64-osx/Cabal-1.24.0.0 build lib:cra-reporting exe:cra-reporting-exe --ghc-options " -ddump-hi -ddump-to-file"
    Process exited with code: ExitFailure 1
    Logs have been written to: /Users/seanhess/projects/simple/cra-reporting/.stack-work/logs/cra-reporting-0.1.0.0.log

    Preprocessing library cra-reporting-0.1.0.0...
    [8 of 8] Compiling Simple.DataX.Worker ( src/Simple/DataX/Worker.hs, .stack-work/dist/x86_64-osx/Cabal-1.24.0.0/build/Simple/DataX/Worker.o )

    /Users/seanhess/projects/simple/cra-reporting/src/Simple/DataX/Worker.hs:6:1: error:
        Failed to load interface for ‘Network.Worker’
        Perhaps you meant
          Network.Socket (needs flag -package-key network-2.6.3.1)
          Network.Wreq (from wreq-0.4.1.0)
          Network.Socks5 (needs flag -package-key socks-0.5.5)
        Use -v to see a list of the files searched for.

如果我从项目文件夹中运行stack build,外部包似乎可以正常运行。

两个项目都针对lts-7.3

1 个答案:

答案 0 :(得分:1)

以上示例应该有效。我从头开始尝试这个,它运行正常。该错误是由于某种构建工件造成的。

如果它再次发生,我会在子项目中删除.stack-work并重建。