stackというツールでhaskellのプロジェクト管理をしてみる
ローカル単位で管理するのが一般的らしい。使い方を調べるのが結構大変だったので。メモを残しておく
環境
- ubuntu: 17.10
project作成
stack new test-proj
# ...projectが作成される
cd test-proj
作成後のプロジェクトの中身はこんな感じ
tree
.
├── app
│ └── Main.hs
├── ChangeLog.md
├── LICENSE
├── test-prod.cabal
├── package.yaml
├── README.md
├── Setup.hs
├── src
│ └── Lib.hs
├── stack.yaml
└── test
└── Spec.hs
- test
hjq.cabal
に設定
packageの追加
package.yaml
...
dependencies:
- base >= 4.7 && < 5
...
の下に追加していく
実行
runで実行
exeファイルをbuildしないで実行する
./app/Main.hs
stack run
execで実行
exeファイルをbuildして実行する
stack install
stack exec test-proj-exe
stack install
Copying from ...
Copied executables to ~/.local/bin:
- test-proj-exe
stack exec test-proj-exe
someFunc
stack new
someFunc
exeの名前は
package.yaml
executables:
test-proj-exe:
にある、変更すると変えられるっぽい
開発用コマンド
watch的な、ファイルを監視して、変更されるとリビルドしてくれる
stack test --fast --file-watch --no-run-tests
haskell-ide-engine install
lintや補完をしてくれる これとエディタを組み合わせて、開発環境を構築する
(vscodeを使っているので、vscodeのextension、Haskell Language Serverをインストールしている)
git clone https://github.com/haskell/haskell-ide-engine --recursive
cd haskell-ide-engine
ghcのバージョンに依ってinstallするバージョンを変える必要がある
stack ghc -- --version
...
The Glorious Glasgow Haskell Compilation System, version 8.6.3
stack ./install.hs hie-8.6.3
vscodeを使ってみたが、 hoogleがない、みたいなwarningがでたので hoogleを入れてみる。どうやら関数の補完とかするときに使うデータベース?みたいなものらしい
stack hoogle --setup
# installが始まる 数分かかる
エラーがでた、以下に従って、extra-depsを追加してみる
* Recommended action: try adding the following to your extra-deps
in ~/.stack/global-project/stack.yaml:
haskell-src-exts-1.21.0@sha256:02421cacaa48c055551b8e5796efc543301b7ea9527a38e1385403d2b85512fb
~/.stack/global-project/stack.yaml
extra-deps:
- haskell-src-exts-1.21.0@sha256:02421cacaa48c055551b8e5796efc543301b7ea9527a38e1385403d2b85512fb
stack hoogle --setup
# グローバルデータベースの作成
stack exec -- hoogle generate
一応エラーはでなくなった。
参考
- https://qiita.com/igrep/items/da1d8df6d40eb001a561
- https://qiita.com/waddlaw/items/b83cd10311200095fe87#hie-%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB