stack build でエラーが出る

Haskell のパッケージ管理システム便利版の stack というものをいじっていてビルドしようとした際に出たエラーの対処法です。

cabal の他に新しくできた stack というものは、パッケージ依存性の問題(cabal hell)を解決するようにできているそうです。便利。

haskell.e-bigmoon.com

(↑stack の使い方、なぜstackを使うべきかなどが詳細に書かれていますので、 stack の説明は上記のページにお任せすることにします)

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