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 から安定版を切り出したスナップショット(固定・安心・再現性)