(2017.1) 大幅に加筆。
HaskellにはCabalというパッケージシステムがあります。RubyでいうRubyGemsのようなものです。
追加パッケージをコマンド一つでインストールできます。
バージョン地獄 (dependency hell) が大変。
Fedora Linux では, haskell-platform パッケージからの依存関係で, cabal コマンドが /usr/bin にインストールされます。
Fedora 25 のは ghc-Cabal 1.22.5.0 と cabal-install 1.22.9.0 です。ghc-Cabal がライブラリ, cabal-install がコマンドライン・ツールです。
バージョンが古いので, 別に新しいバージョンを入れます。ほかのライブラリも, rpm では入れません。
2017年1月現在の最新バージョンは, cabal-install 1.24.0.2 (using Cabal library 1.24.2.0) です。
root になって, まず cabal update コマンドで, パッケージリストを更新します。
# cabal update Config file path source is default config file. Config file /root/.cabal/config not found. Writing default configuration to /root/.cabal/config Downloading the latest package list from hackage.haskell.org
新しいバージョンの cabal は, --global オプションを指定して /usr/local 以下にインストールします。
# cabal install --global cabal-install
ネイティブのライブラリは, /usr/local/lib/x86_64-linux-ghc-7.10.3/ 以下に入ります。
cabal list コマンドを使います。
パッケージ名は部分一致です。
$ cabal update Downloading the latest package list from hackage.haskell.org $ cabal list persistent
パッケージは, Hackage のWebサイトでも検索できます。
インストールされたものだけを表示するときは cabal list --installed.
$ cabal list --installed --simple-output Cabal 1.22.5.0 Cabal 1.24.2.0 GLURaw 1.5.0.2 GLUT 2.7.0.3 HTTP 4000.3.3 HUnit 1.3.1.1 ObjectName 1.1.0.0 OpenGL 2.13.1.0 ...以下、一覧が続く
パッケージをインストールするときは、次のようにします。--dry-run オプションを付けると何が行われるか表示されるだけで、実際にインストールはされません。
--global を付けないと, 自分のホームディレクトリ以下にインストールされます。
$ cabal update $ cabal install --dry-run HDBC-postgresql Resolving dependencies... In order, the following would be installed (use -v for more details): convertible-1.0.11.1 utf8-string-0.3.7 HDBC-2.3.1.2 HDBC-postgresql-2.3.2.2
内容を確認してから、--dry-runオプションなしで実行します。
特定のバージョンを指定してインストールするときは、次のようにします。
cabal install foo-1.0
cabal のコマンドは, 次のものがあります;
| コマンド | 説明 |
|---|---|
| info | Display detailed information about a particular package. |
| fetch | Downloads packages for later installation. |
| unpack | Unpacks packages for user inspection. |
| report | Upload build reports to a remote server. |
| copy | Copy the files into the install locations. |
| haddock | Generate Haddock HTML documentation. |
| hscolour | Generate HsColour colourised code, in HTML format. |
| register | Register this package with the compiler. |
| help | Help about commands |
例えば, infoコマンドでは, 次のようにパッケージの内容を, インストールする前に確認できます。
# cabal info persistent
* persistent (library)
Synopsis: Type-safe, multi-backend data serialization.
Versions available: 0.9.0.4, 1.2.3.3, 1.3.2, 1.3.3, (2.0.5.1), (2.0.7),
(2.0.7.1), (2.0.8), 2.1 (and 86 others)
Versions installed: [ Not installed ]
Homepage: http://www.yesodweb.com/book/persistent
Bug reports: https://github.com/yesodweb/persistent/issues
Description: Type-safe, data serialization. You must use a specific
backend in order to make this useful.
Category: Database, Yesod
License: MIT
Author: Michael Snoyman <michael@snoyman.com>
Maintainer: Michael Snoyman <michael@snoyman.com>, Greg Weber <greg@gregweber.info>
Source repo: git://github.com/yesodweb/persistent.git
Flags: nooverlap
Dependencies: base ==4.*, bytestring >=0.9, transformers >=0.2.1,
time >=1.1.4, text >=0.8, containers >=0.2, conduit >=1.0,
resourcet >=1.1, exceptions >=0.6, monad-control >=0.3,
lifted-base >=0.1, resource-pool -any, path-pieces >=0.1,
aeson >=0.5, monad-logger >=0.3, transformers-base -any,
base64-bytestring -any, unordered-containers -any,
vector -any, attoparsec -any, template-haskell -any,
blaze-html >=0.5, blaze-markup >=0.5.1, silently -any,
mtl -any, fast-logger >=2.1, scientific -any,
resource-pool -any, tagged -any, scientific -any,
blaze-html -any, monad-control -any, conduit -any,
monad-logger -any, resourcet -any, aeson -any,
path-pieces -any, transformers -any, attoparsec -any,
base64-bytestring -any, vector -any, bytestring -any,
time -any, unordered-containers -any, text -any,
containers -any, hspec >=1.3, base ==4.*
Cached: No
Modules:
Database.Persist
Database.Persist.Class
Database.Persist.Quasi
Database.Persist.Sql
Database.Persist.Types
さらに, 開発用に, 次のコマンドもあります;
| コマンド | 説明 |
|---|---|
| init | Interactively create a .cabal file. |
| check | Check the package for common mistakes |
| sdist | Generate a source distribution file (.tar.gz). |
| upload | Uploads source packages to Hackage |
| configure | Prepare to build the package. |
| build | Make this package ready for installation. |
| clean | Clean up after a build. |
| test | Run the test suite, if any (configure with UserHooks). |
| bench | Run the benchmark, if any (configure with UserHooks). |