Cabal の使い方

Cabal とは

Cabal とは Haskell のパッケージマネージャーで、 Java の Gradle や、JavaScript の npm に相当するプログラムです。

インストール

Cabal は通常は haskell.org から GHCup 等を使って GHC と同時にインストールします。

基本的な使い方

久しぶりに cabal をつかうときは cabal update しておきましょう。

以下のコマンドを実行することで、Cabal の my-project という名前のプロジェクトを作成できます。

mkdir my-project
cd my-project
cabal init

途中でいくつかの質問を聞かれますが、 Author name や Maintener email address は適切に入力してください。 他は、すべてデフォルト(Enter を押していくだけ)で問題ないでしょう。 とりあえず、テンプレートプログラムができているので、ビルドします。

cabal build

次のコマンドで実行します。

cabal run my-project

あるいは以下のコマンドでも実行できます。

cabal run exes

プログラム(デフォルトは app/Main.hs)の中身とともに my-project.cabal というファイルに必要な設定を書いていきます。 cabal init のときにデフォルトを選んだ場合は、 .cabal ファイルにコメントが入っているはずなので、 どこに何を書くか、大体わかります。 特に build-depends: のあとに、 依存するライブラリー名をコンマで区切って記述します。

プログラムに実行時引数を渡すときは、次のようにします。

cabal run my-project -- runtime arguments

あるいは以下のコマンドでも実行できます。

cabal run exes -- runtime arguments

実行例

既存の Git リポジトリーにあるプロジェクトの依存関係をインストールしてみます。

https://github.com/Kagawa-Laboratory/quasiquote-sample.git から、QuasiQuote を使用したサンプルプロジェクトをクローンして、依存関係をインストールしてください。 このサンプルは C 言語の“愚形”を発見しようとするプログラムです。

git clone https://github.com/Kagawa-Laboratory/quasiquote-sample.git
cd quasiquote-sample
cabal build

これで、サンプルプロジェクトのquasiquote-sample.cabal ファイルに記録されている依存関係がインストールされました。 実行するには、解析したい C のプログラムを dir/foo.c としておいて、次のコマンドを使用します。

cabal run quasiquote-sample -- dir\foo.c 

C のプログラムとしては以下のような例を試してみてください。

基本的な使い方

Cabal の使用例として diagrams ライブラリーを使ってみましょう。 次のように Cabal プロジェクトを作成します。

mkdir diagrams-sample
cd diagrams-sample
cabal init

cabal init のときに、途中の “What is the main module of the executable:” だけ、次のように選択してください。 あとはデフォルトのままで問題ありません。

What is the main module of the executable:
 * 1) Main.hs
   2) Main.lhs
   3) Other (specify)
Your choice? [default: Main.hs] 2

diagrams-sample.cabal ファイルの build-depends: のところに、 次のように diagrams-libdiagrams-svg を追加してください。

      build-depends:    base ^>=4.21.0.0
                      , diagrams-lib
                      , diagrams-svg    

base のバージョン (^>=4.21.0.0)は GHC のバージョンに依存するので cabal init のときにできた通りにしておいてください。 これで準備は完了です。

app/Main.hs次のような内容に書き換えてください。

あるいは Diagrams ギャラリー から好きなのを選んでも構いません。 そのソースファイルをダウンロードして、app/Main.hs と置き換えてください。(あるいは app/ ディレクトリーの下において、diagrams-sample.cabal の main-is: をダウンロードしたファイル名に変更してください。 例えば Kaleidoscope.lhs をダウンロードした場合は次のようにします。

    main-is:         Kaleidoscope.lhs      

準備ができたら、次のコマンドでビルドします。

cabal build

このとき、diagrams-libdiagrams-svg 以外にライブラリーが必要な場合は、エラーが表示されます。 (選んだソースファイルによっては、依存するライブラリー (build-depends) を追加する必要がある場合もあります。) エラーメッセージから必要なライブラリーを調べて diagrams-sample.cabalbuild-depends: に追加してください。

ビルドが成功したら実行します。上の Main.hs の場合は、実行時引数が必要なので次のコマンドで実行します。

cabal run exes -- -w 256 -h 256 -o sample.svg 

これで、sample.svg というファイルができているはずです。 ブラウザなどで開いて確認してください。

他に gloss というライブラリーもあります。 こちらは、リアルタイムにアニメーションを表示できるライブラリーです。 このライブラリーを使用するときは build-depends:gloss を指定します。 ホームページにいくつかのサンプルがあるので、試してみてください。