日記(日記とは言っていない)

https://zenn.dev/23prime に移行しました。

<Haskell> Stack の使い方メモ

Stack は,簡単に言うと Haskell のプロジェクト用ビルドツール.

Stack では,従来 Haskell での開発の際にあった(らしい)パッケージの依存関係がすぐぶっ壊れる問題を解決しているため,現在こいつをって開発を行うのが一般的.

Installing

Unix 系 OS であれば次のどちらかを打てばよい.

$ curl -sSL https://get.haskellstack.org/ | sh
$ wget -qO- https://get.haskellstack.org/ | sh

Windows の場合は インストーラー が用意されている.

よく使うコマンド

  • プロジェクトの新規作成(雛形を使う)
$ stack new <PROJECT NAME>

この雛形には package.yamlstack.yaml という設定ファイルが含まれている.package.yaml には依存パッケージやプロジェクト全体の設定やバージョン等の情報,stack.yaml には GHC のバージョン等を記述する(後述).

  • プロジェクトの新規作成(雛形を使わない)
$ stack init <PROJECT NAME>
  • プロジェクト指定のパッケージやコンパイラをインストール
$ stack setup
  • ツールのインストール(後述の HLint や stylish-haskell とか)
$ stack install <TOOL NAME>

インストールされたコンパイラやパッケージ等は,~/.stack 以下に格納される.いざとなればこれを丸ごとふっ飛ばせば,リセットできる.

  • プロジェクトのビルド
$ stack build
  • プロジェクトの実行
$ stack exec <EXECUTABLE>
  • REPL の起動
$ stack ghci
  • テストの実行
$ stack test
  • Stack の更新
$ stack upgrade
  • Haddock ドキュメント(Hackage 形式のドキュメント)の作成
$ stack haddock --haddock-arguments --odir=haddock

この上で,./haddock/index.html を Web ブラウザ等で開くと閲覧できる.

設定ファイルの書き方とか

設定ファイルは(基本的には)

  • hoge.cabal
  • stack.yaml

から成る.

最近のバージョンではデフォルトで hpack に対応しているため, cabal ファイルを直接編集する必要はあまりない. 代わりに package.yaml を編集する.

グローバルな設定

個々のプロジェクトではなく,どこからでも Stack 経由で GHC を使う感じのヤツ.

  • グローバルな GHC バージョンの指定
    • ~/.stack/global-project/stack.yaml に記述.
    • 記述しないと,最新版が入る.

外部ライブラリを使うための記述

標準ライブラリ 以外のライブラリを使いたいときの設定の記述方法.

基本的に,次にあるライブラリを使うことができる.

  • Stackage

    package.yamldependencies に,

dependencies:
- containers
- text

などと書き加えていくだけでおk.

  • Hackage

    stack.yamlextra-deps に,使いたいライブラリを書き加える.

extra-deps:
- hoge-3.1.4

その上で,package.yamldependencies にも書き加える.

extra-deps:
- github: user/repository
  commit: commitID

その上で,やはり package.yamldependencies にも書き加える.

実行・テストの記述

それぞれ package.yamlexecutables:test: 以下に記述する. 雛形をいい感じに変更すれば使えるので詳細は省く.