2015-10-05 47 views
1

這是我stack.yaml文件中聲明hspec作爲一個額外的依賴性:儘管堆棧求解,找不到模塊`Test.Hspec」

# Specifies the GHC version and set of packages available (e.g., lts-3.5, nightly-2015-09-21, ghc-7.10.2) 
resolver: lts-3.8 

# Local packages, usually specified by relative directory name 
packages: 
- '.' 

# Packages to be pulled from upstream that are not in the resolver (e.g., acme-missiles-0.3) 
extra-deps: 
- hspec-2.2.0 

當我運行stack solver它說沒有做改變:

[email protected]:/src/test_stack/a-test/src# stack solver 
This command is not guaranteed to give you a perfect build plan 
It's possible that even with the changes generated below, you will still need to do some manual tweaking 
Asking cabal to calculate a build plan, please wait 
No needed changes found 

To automatically modify your stack.yaml file, rerun with '--modify-stack-yaml' 

這是我的源文件(只檢查,我可以用Hspec與堆棧):

module Main where 

import Test.Hspec 


main :: IO() 
main = do 
    putStrLn "hello world" 

當我運行stack build我得到:

2015年10月5日22:24:08.450413:[提醒]找不到模塊'Test.Hspec」 @(stack_Bp003b8iWaELtdr693pSPs:Stack.Build.Execute的src /堆疊/ Build/Execute.hs:1241:35)

我認爲stack solver確保額外的依賴關係正常。

我做錯了什麼? 這是我第一次使用堆棧。

+3

首先要檢查的是您是否已將* hspec *添加到cabal文件。 – duplode

+1

具體來說,查找'build-depends:base> = 4.7 && <5'行,添加一個逗號,然後在其中寫入'hspec'。然後再次嘗試'stack build'。 –

+0

@duplode這意味着堆棧不會直接替換使用cabal來管理依賴關係嗎?我是這麼認爲的,那是爲我管理cabal。 –

回答

2

雖然堆棧取代了cabal-install(用於構建和安裝軟件包的命令行工具),但它仍然使用Cabal打包基礎結構。尤其是,這意味着使用堆棧構建的項目仍然是Cabal兼容的包,其中包含.cabal文件,並且它們的所有依賴項都應該在.cabal文件的build-depends部分列出,並帶有適當的版本範圍。即使在stack.yaml文件extra-deps字段中也指定了依賴關係,因爲該字段用於不同的目的(即,在生成包時爲堆棧提供確切的版本)。