cabal-install "v2" ビルド メモ

しばらく前からstackばかり使っていたのでCabalにはとんと疎くなってきたが、cabal-installの"v2"系のビルドはかなり使いやすくなっているとのことで、使い方をチェックしてみた。

stackの代わりにcabalを使うメリットとしては、以下が挙げられると思う。

  • stackageに上がってパッケージや上がってないバージョンを自由に使える。
  • リリースされたばかりの最新のGHCを使える。
  • haddockドキュメントをビルドしてhackageにアップロードできる (hackageのUploadページの下部を参照)

cabal-installのドキュメントはこちら: Welcome to the Cabal User Guide — Cabal 3.4.0.0 User's Guide

ざっくり言うと、

  • cabal.projectファイルに開発対象のcabalプロジェクトリストを書く。
    • これはstack.yamlみたいなもの。
    • フォーマットは.cabalファイルに似ている。
    • packages:スタンザにcabalプロジェクトのサブディレクトリを並べるのが典型的な使い方。
  • cabal v2-buildコマンドでビルド。
    • ビルドプランはプロジェクトごとに独立であり、グローバルな状態に依存しない。
    • 共有可能なexternal packageについてはグローバルにキャッシュされるので、基本的に余計なリビルドは発生しない。
    • 開発対象のlocal packageはプロジェクトごとにビルド状態保存される。
  • cabal v2-configureは必須ではない。
    • 開発用にビルドオプションを記録しておきたいときに使う。
    • v2-configureを実行すると、与えたビルドオプションをもとにcabal.project.localファイルを生成する。
  • cabal v2-freezeコマンドでその場のビルドプランをcabal.project.freezeファイルとして書き出す。