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
diagrams-sample.cabal ファイルの build-depends: のところに、
次のように diagrams-lib と diagrams-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-lib と diagrams-svg 以外にライブラリーが必要な場合は、エラーが表示されます。
(選んだソースファイルによっては、依存するライブラリー (build-depends) を追加する必要がある場合もあります。)
エラーメッセージから必要なライブラリーを調べて diagrams-sample.cabal の build-depends: に追加してください。
ビルドが成功したら実行します。上の Main.hs の場合は、実行時引数が必要なので次のコマンドで実行します。
cabal run exes -- -w 256 -h 256 -o sample.svg
これで、sample.svg というファイルができているはずです。
ブラウザなどで開いて確認してください。
他に
gloss というライブラリーもあります。
こちらは、リアルタイムにアニメーションを表示できるライブラリーです。
このライブラリーを使用するときは build-depends: に gloss を指定します。
ホームページにいくつかのサンプルがあるので、試してみてください。