2017-05-27 6 views
1

プロジェクトをスタックに追加する依存関係を追加しますか?実行した後

stack new my-project 
cd my-project 
stack setup 
stack build 

私は依存関係としてConduitライブラリを追加したいと思います。私が持っている、stack new経由して、stack.yamlを生成し、編集

:私がしようとすると

executable my-project-exe 
    hs-source-dirs:  app 
    main-is:    Main.hs 
    ghc-options:   -threaded -rtsopts -with-rtsopts=-N 
    build-depends:  base 
        , my-project 
        , conduit 
    default-language: Haskell2010 

:に

executable my-project-exe 
    hs-source-dirs:  app 
    main-is:    Main.hs 
    ghc-options:   -threaded -rtsopts -with-rtsopts=-N 
    build-depends:  base 
        , my-project 
    default-language: Haskell2010 

extra-deps: 
- conduit-1.2.10 

その後、私はからmy-project.cabalを修正しましたstack buildに:

$cat app/Main.hs 

module Main where 

import Conduit 
import Lib 

main :: IO() 
main = someFunc 

それは失敗します。

$stack build 
mtl-2.2.1: using precompiled package 
primitive-0.6.1.0: using precompiled package 
stm-2.4.4.1: using precompiled package 
transformers-compat-0.5.1.4: using precompiled package 
exceptions-0.8.3: using precompiled package 
mmorph-1.0.9: using precompiled package 
transformers-base-0.4.4: using precompiled package 
monad-control-1.0.1.0: using precompiled package 
lifted-base-0.2.3.10: using precompiled package 
resourcet-1.1.9: using precompiled package 
conduit-1.2.10: configure 
conduit-1.2.10: build 
conduit-1.2.10: copy/register 
my-project-0.1.0.0: configure (lib + exe) 
Configuring my-project-0.1.0.0... 
my-project-0.1.0.0: build (lib + exe) 
Preprocessing library my-project-0.1.0.0... 
[1 of 1] Compiling Lib    (src/Lib.hs, .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/Lib.o) 
Preprocessing executable 'my-project-exe' for my-project-0.1.0.0... 
[1 of 1] Compiling Main    (app/Main.hs, .stack-work/dist/x86_64-osx/Cabal-1.24.2.0/build/my-project-exe/my-project-exe-tmp/Main.o) 

/Users/kevinmeredith/Workspace/conduit_sandbox/my-project/app/Main.hs:3:1: error: 
    Failed to load interface for ‘Conduit’ 
    Use -v to see a list of the files searched for. 
Completed 12 action(s). 

-- While building package my-project-0.1.0.0 using: 
     /Users/kevinmeredith/.stack/setup-exe-cache/x86_64-osx/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-osx/Cabal-1.24.2.0 build lib:my-project exe:my-project-exe --ghc-options " -ddump-hi -ddump-to-file" 
    Process exited with code: ExitFailure 1 

にはどうすれば適切にconduitを追加することができますか?

stackプロジェクトにライブラリを追加する場合、stack.yamlおよび/またはmy-project.cabalの両方を編集する必要がありますか?

答えて

2

haddocks for conduitを見ると、インポートするモジュールがコンジットでないことに注意してください。Data.Conduitです。

Conduitモジュールは、conduit-combinatorsパッケージに含まれています。それはあなたの代わりに使用したいパッケージがある場合は、次のように自分の秘密結社のファイルを調整し、import Conduit前のように:パッケージ間の

executable my-project-exe 
    hs-source-dirs:  app 
    main-is:    Main.hs 
    ghc-options:   -threaded -rtsopts -with-rtsopts=-N 
    build-depends:  base 
        , my-project 
        , conduit-combinators 
    default-language: Haskell2010 

違いは以下のとおりである(これはthe project's readmeから取得されます)。

  • conduit-combinators:内蔵
  • conduit共通機能の多くを提供する:コアデータ型とプリミティブ関数
  • conduit-extraを定義:多くの一般的な低レベルの操作

のサポートを追加サイドノート:stack.yamlファイルに変更を加える必要はありません。これらのパッケージは両方ともスタッカで利用できます。

+0

ありがとう、@エリック。 'conduit-libraries'がスタックにない場合、' stack.yaml'に何をする必要がありますか? –

+0

例えば、ローカルパッケージ、ハッキングで利用可能なパッケージ、スタティックではないパッケージ、gitリポジトリにあるパッケージなどに依存する場合は、stack.yamlを編集する必要があります。 、https://docs.haskellstack.org/en/stable/GUIDE/#adding-dependencies – Erik

+0

を参照してください。しかし、あなたは元の質問に正しく当てはまりました。パッケージをhackageから外すには、extra-depsフィールドにパッケージ名を表示し、スタックからダウンロードする必要があります。 – Erik

関連する問題