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



ビルドツール
最新の一番わかり易いbuild tool
GHCの導入をしてくれる
Haskellでプロジェクトの作成やビルドをする
前からあったが、地獄が生まれるのでStackが誕生した
パッケージ管理をする
とはいえ、最近はcabalもまともになっているらしい
大規模アプリケーションを作るときに使おう
上級者向けらしい
2022年現在deprecated
補足
cabal-installとstackの対応表がある
やっていることがかぶっているからmrsekut
名前が紛らわしいが、Stackとcabal-installは、どちらも
Cabal.cabalを内部で利用している
ビルドツールは別だが、内部で同じものを使っている箇所がある、という感じ
だからstackでprojectを作ってもcabalの概念が出てくる
Stackとcabal-installの大きな違いは、LTS ResolverであるStackageを使うか否か
前者はコレを使っているため、library同士のversion解決の問題が起こりにくい
雑なイメージ
Stack cabal-install
内部で使ってるCabalCabal
package管理package.yaml(hpackで.cabalに変換)または.cabal.cabal
package.yaml.cabalの変換をしてくれるやつ
Stackでプロジェクトを作成すれば自動的に付いてくる
なくても良いが、勝手に付いてくるし、ちょい便利だし使うか、ぐらいのイメージ
GHC, cabal, HLSのversion管理をするinstaller




設定ファイル
package管理
Stackを使うとついてくる
package管理をする
hpackを使って.cabalに変換して使われる
だから、直接.cabalに書くなら削除してしまっても問題ない
Stackcabal-installのどちらを使ってもついてくる
Stackの場合、package.yamlを使うなら直接編集することはない
package管理をする
Stackを使うとついてくる
Stackの追加の構成の指定をする
Stackageにないlibaryの使用や、LTSのversion指定などをする



インタプリタとコンパイラ
Haskellのコンパイラと言えば基本的にこれを指す。これ一択
Haskell仕様に沿ったコンパイラとインタプリタ
GHC拡張とかもある
GHCより軽量なインタプリタ
インタプリタのみ
使わなくて良さそう


パッケージアーカイブ
Haskellパッケージの集まり
多数の Cabal パッケージを集めたリポジトリ管理サービス
StableなHackage
ただのパッケージ集合なHackageに、依存関係安全性の構造をいれたような感じ
全ての依存関係がおかしくならないように頻繁に更新されている
ほぼこっちを使えばいい


ユースケースや、向き不向きを知りたいんだよmrsekut
利用者に見せたくない振る舞い
デフォルトで使えるやつ?
テストフレームワーク
もともとあったtest-frameworkの後継
ランダムな値を生成してテスト
単体テスト
利用者に見せたい振る舞いを、コメントとしてテストを書く


ドキュメントツール
alternative to Haddock

最も使われているやつっぽい
import as とかは右側に揃えられる


IDE
Language Server
通称HLS
HLSの前身
2020/8頃に開発終了している
ぐぐると記事がいっぱい出てくるが全部古い
これはなに?
参考



experimentalなpackage manager
ここで紹介されていた
Fragment-based code distribution!
HaskellでModule単位で共有するんじゃなくてもっと小さい単位で共有していこうぜというやつ
ここでの「共有」は「Hackageで管理」と同じような文脈で言ってるmrsekut
Nix-based incremental build tool for Haskell projects
既にメンテされてないmrsekut
Predictable Haskell development environments with Cabal and Nix.
2019で止まってるmrsekut
Yet another Haskell build system.
2018で止まってるmrsekut








たぶんいらんやつ
stackage-cli
Stackの開発段階時にあったやつ
Stackに一本化された
何するかは知らん





まだ色々読んでいる途中mrsekut



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