stack build でエラーが出る
Haskell のパッケージ管理システム便利版の stack というものをいじっていてビルドしようとした際に出たエラーの対処法です。
cabal の他に新しくできた stack というものは、パッケージ依存性の問題(cabal hell
)を解決するようにできているそうです。便利。
stack build できない
stack では、YAML形式の設定ファイルを読み込んでビルドしていくのですが、それを行おうとすると構文解析に失敗します。
Could not parse '(略)/stack.yaml': Aeson exception: Error in $['extra-deps'][0]: failed to parse field 'extra-deps': expected PackageIdentifier, encountered Object See http://docs.haskellstack.org/en/stable/yaml_configuration/
エラーによれば、extra-deps
の一つ目で詰まったようです。私のファイルでは
extra-deps: - git: [リポジトリのURL] commit: [特定のコミット]
という部分の - git:
と書いているところが怒られていて、ここにはパッケージの名前が入るべきだと言われていますが、ネットで調べた限りはこれは一応書き方としては間違っていないようですね…
stack のバージョンをあげる
原因は stack のバージョンがあまりにも古いことにあったようです。調べたところ私の stack はなんと version 1.3.2 (2016年12月) でした。 version 1.5.1 よりも古いと上記のエラーが出てしまうみたいです。
$ stack upgrade Current Stack version: 1.3.2, available download version: 1.9.1 Newer version detected, downloading Querying for archive location for platform: osx-x86_64-static Querying for archive location for platform: osx-x86_64 Downloading from: https://github.com/commercialhaskell/stack/releases/download/v1.9.1/stack-1.9.1-osx-x86_64.tar.gz Download complete, testing executable Version 1.9.1, Git revision f9d0042c141660e1d38f797e1d426be4a99b2a3c (6168 commits) x86_64 hpack-0.31.0 New stack executable available at (ホームディレクトリ)/.local/bin/stack
新しい stack がダウンロードできたので、/usr/local/bin
の stack のリンクを貼り替えます。
リンク先のパスを知るには readlink
コマンドが使えます。
$ readlink stack /Library/Haskell/ghc-8.0.2-x86_64/bin/stack
正しくリンクを貼り替えられたようです。この後、stack build
もうまくいきました。
$ stack --version Version 1.9.1, Git revision f9d0042c141660e1d38f797e1d426be4a99b2a3c (6168 commits) x86_64 hpack-0.31.0