tags : Haskell, TidalCycles, GHCup
HackageとStackageの違い
Hackage
- 役割: Haskell パッケージの公式リポジトリ(npm における npmjs.com、Ruby における rubygems.org に相当)。
- 性質:
- 開発者が自由にアップロードできる。
- パッケージは最新がすぐに反映される。
- バージョン依存の整合性は保証されない。
- そのため「最新版が上がっているが、他のライブラリとの組み合わせで壊れる」こともある。
- 利用ツール: cabal install, cabal update は Hackage を直接参照。
Stackage
- 役割: 「安定したスナップショット」の集合。Hackage 上のパッケージを選別して依存関係を固定したもの。
- 性質:
- LTS (Long Term Support) と Nightly の 2 系列がある。
- ある時点で「この組み合わせならビルド通る」とテスト済みのセットを提供。
- GHC のバージョンとも紐づく(例: LTS 24.8 → GHC 9.10.2)。
- stack コマンドが利用するデフォルトのソース。
- メリット:
- バージョン衝突や依存関係エラーを避けやすい。
- CI やチーム開発で「同じ環境を再現」するのに強い。
ざっくりまとめ
- Hackage = 全部入りのパッケージ倉庫(最新・カオス・自由)
- Stackage = Hackage から安定版を切り出したスナップショット(固定・安心・再現性)