Haskellに纏わるツールたち
Haskellに纏わるツールたちを3行で説明する
多すぎでは?キレそう

ビルドツール
最新の一番わかり易いbuild tool
Haskellでプロジェクトの作成やビルドをする
前からあったが、地獄が生まれるのでStackが誕生した
パッケージ管理をする
とはいえ、最近はcabalもまともになっているらしい
大規模アプリケーションを作るときに使おう
上級者向けらしい
2022年現在deprecated
補足
cabal-installとstackの
対応表がある
やっていることがかぶっているから

名前が紛らわしいが、Stackとcabal-installは、どちらも
ビルドツールは別だが、内部で同じものを使っている箇所がある、という感じ
だからstackでprojectを作ってもcabalの概念が出てくる
Stackとcabal-installの大きな違いは、LTS Resolverである
Stackageを使うか否か
前者はコレを使っているため、library同士のversion解決の問題が起こりにくい
雑なイメージ | Stack | cabal-install |
内部で使ってる | Cabal | Cabal |
package管理 | package.yaml(hpackで.cabalに変換)または.cabal | .cabal |
Stackでプロジェクトを作成すれば自動的に付いてくる
なくても良いが、勝手に付いてくるし、ちょい便利だし使うか、ぐらいのイメージ
設定ファイル
package管理
Stackを使うとついてくる
package管理をする
だから、直接
.cabalに書くなら削除してしまっても問題ない
package管理をする
Stackを使うとついてくる
Stackの追加の構成の指定をする
Stackageにないlibaryの使用や、LTSのversion指定などをする
インタプリタとコンパイラ
Haskellのコンパイラと言えば基本的にこれを指す。これ一択
Haskell仕様に沿ったコンパイラとインタプリタ
GHCより軽量なインタプリタ
インタプリタのみ
使わなくて良さそう
パッケージアーカイブ
Haskellパッケージの集まり
多数の Cabal パッケージを集めたリポジトリ管理サービス
ただのパッケージ集合なHackageに、依存関係安全性の構造をいれたような感じ
全ての依存関係がおかしくならないように頻繁に更新されている
ほぼこっちを使えばいい
ユースケースや、向き不向きを知りたいんだよ

利用者に見せたくない振る舞い
デフォルトで使えるやつ?
テストフレームワーク
もともとあったtest-frameworkの後継
ランダムな値を生成してテスト
単体テスト
利用者に見せたい振る舞いを、コメントとしてテストを書く
ドキュメントツール
最も使われているやつっぽい
import
の as
とかは右側に揃えられる
IDE
Language Server
通称HLS
HLSの前身
2020/8頃に開発終了している
ぐぐると記事がいっぱい出てくるが全部古い
これはなに?
参考
experimentalなpackage manager
Fragment-based code distribution!
HaskellでModule単位で共有するんじゃなくてもっと小さい単位で共有していこうぜというやつ
ここでの「共有」は「Hackageで管理」と同じような文脈で言ってる

Nix-based incremental build tool for Haskell projects
既にメンテされてない

Predictable Haskell development environments with Cabal and Nix.
2019で止まってる

Yet another Haskell build system.
2018で止まってる

たぶんいらんやつ
stackage-cli
Stackに一本化された
何するかは知らん
まだ色々読んでいる途中

何が違う?
$ cabal install hogehoge
$ stack install doctest
$ stack ghci
はなに?
base
パッケージを読み込んでghciを起動
つまりルートが読み込まれるということ?
$ stack ghci --package array
arrayパッケージ追加して起動
$ runhaskell
はなに?
だれのもの?
いみわからんので 年表作ってくれ
どのsnapshot を使うかを stack.yaml の resolver の項目で指定とは