uni farm

Haskell勉強メモ2 -stackで開発用環境構築-

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でexeファイルを作ってから、 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がprintされる

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

一応エラーはでなくなった。

参考

2022, Built with Gatsby. This site uses Google Analytics.