stackageの特定のresolverに上がっているパッケージバージョンを調べるツール

指定したHaskellパッケージのバージョン番号が指定したstackage resolverでいくつなのかを調べるコマンドラインツールを作った。

例えばこのように使う。

$ staversion --resolver lts-4.2 --resolver lts-7.0 conduit base
------ lts-4.2
conduit ==1.2.6.1,
base ==4.8.2.0

------ lts-7.0
conduit ==1.2.7,
base ==4.9.0.0

自分はHaskellパッケージを作る際、travis-CIを使ってresolverはいくつか変えながらテストを回し、その結果を依存先パッケージのバージョン範囲(.cabalファイルのbuild-dependsセクション)に反映させている。その場合、テストした各resolver(特にそのうちの最新と最古のもの)における依存先パッケージのバージョン番号を知る必要がある。stackage.orgのWebサイトでは、最新のLTSやnightlyにおけるパッケージバージョン番号は分かっても、古いresolverでのバージョン番号をまとめて表示することができない。

staversionを使えば、こういったバージョン番号調査をまとめて実施できる。現状では、stackがローカルにダウンロードして置いているビルドプランファイルを読み込んでバージョン番号を調べる。のちのち、自らネットワークを通じてビルドプランファイルをダウンロードできるようにする予定。

ところで、そもそも.cabalの依存先パッケージのバージョン番号範囲はどれだけマジメに書くべきなのだろうか。バージョン上限を入れるとやはりいろいろ面倒くさい。この間hspecのメジャーバージョンアップがあったが、コードの対応作業は全く必要ないにもかかわらず、ビルドを検証して.cabalを書き直す作業だけでそれなりに大変だった。