Cabal は Haskell のパッケージ管理システムです。枠組みとしての Cabal と、コマンドの cabal があり、間違いやすいです。
- Cabal は、パッケージをコンパイルし、インストールする枠組みです
- configure, make, make install に相当
- cabal は、パッケージの依存関係を調べ、必要なパッケージをダウンロードして、インストールするためのコマンドです
- cabal-install と呼ばれることもあります
ここでは、コマンド cabal の使い方を説明します。
インストール
各 OS のパッケージ管理システムを使って cabal をインストールしましょう。GHC を扱っているパッケージ管理システムであれば、cabal にも対応しているはずです。
MacPorts では、以下のようにします。
% sudo port install hs-cabal
あと、Haskell のパーサー・ライブラリである Happy を入れておくと、後々問題を起こしません。
% sudo port install happy
パッケージ・リストの取得
cabal が対応しているパッケージのリストを取得するには、以下のようにします。
% cabal update
これで、"~/.cabal" というディレクトリーが作られます。これからパッケージは、このディレクトリーにインストールされます。
対応パッケージの表示
cabal が扱えるパッケージの一覧は、以下のコマンドで表示できます。
% cabal list
また、cabal でインストールしたパッケージの一覧を取るには、以下のようにします。
% cabal list --installed
なお、ghc-pkg でも、インストール済みのパッケージを表示できます。
% ghc-pkg list
両者が表示する情報は、異なりますので、目的に合わせて併用して下さい。
古いパッケージの更新
(このコマンドは廃止されました。)
GHC には、いくつものパッケージが付いてきています。それらのいくつかは、バージョンが古くなっています。一括で更新するには、upgrade コマンドを使います。
まず、どのパッケージが更新されるか、確かめましょう。
% cabal upgrade --dry-run
よさそうなら、実際に実行します。
% cabal upgrade
sudo コマンドを使っていないことから分るように、GHC に付属のパッケージは削除されず、"~/.cabal" に最新パーッケージがインストールされます。
パッケージのインストール
なにかパッケージをインストールしたくなったら、以下のコマンドを使います。
% cabal install パッケージ名
パッケージ名は、cabal list を使って調べて下さい。ここでも、--dry-run を指定し、何が起こるのか確認できます。
% cabal install パッケージ名 --dry-run
HTTP プロキシー
cabal は、環境変数 http_proxy を参照します。HTTP プロキシーを利用するなら、env コマンドと組み合わせるといいでしょう。
% env http_proxy=プロキシーのURL cabal upgrade --dry-run
注意
GHC 6.8.3 には、byte-string と zlib が付属しており、後者は前者に依存しています。byte-string は古いので cabal upgrade で更新されますが、zlib は最新のため刷新されません。
このため zlib を使おうとすると、byte-string のバージョンがおかしいと言われて動かなくなります。解決するには、cabal install で zlib も更新する必要があります。
このように、基本的なパッケージが更新された場合、それに依存しているパッケージは手で管理しないといけません。