あどけない話

Internet technologies

cabalコマンドの使い方

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 も更新する必要があります。

このように、基本的なパッケージが更新された場合、それに依存しているパッケージは手で管理しないといけません。