Haskellでプログラムを書くための下準備1 - Darcsをインストール

今のところHaskellのプログラムは書き捨てのバッチ系しか作ったこと無いんだけど、やはり仕事のメインのツールとして使うつもりなら正式なパッケージ管理の仕方を学ぶ必要がある。PerlでいうCPANモジュールみたいなやつね。

調べてみると、Haskellでは以下のサイトで紹介されているような流儀でプログラムを作成していくようだ。

Cabalという形式でパッケージ自身のメタ情報やパッケージ間の依存関係を定義してビルドに必要な情報を管理して、Hackageというデータベース上で世界中の開発者が作成したパッケージを一元管理しているみたい。
そしてソースコードのバージョン管理には、他のプログラミング言語で一般的に利用されているSubversionではなく、分散リポジトリ型バージョン管理というパラダイムで設計されたDarcsというソフトウェアで行うのがHaskell流。
分散リポジトリについては別のソフトウェア向けだけどこのページが参考になる。
ちょうど単一のリポジトリでバージョン管理を行うSubversionのことをリーナス・トーバルズがディスってたこともあるし、近未来のトレンドと予測して分散リポジトリ型のバージョン管理システムを勉強しておいてもいいかもしれない。Darcsが普及するかは別として。

というわけで、今後Haskellのアプリケーションやモジュールを使っていくことになるので、ひとまずあまり深く考えずにまずはDarcsを手元の環境にインストールする。

GHCと同じくFedora6のyumでは最新バージョンまでメンテされてないかなーと思ったけど、現時点で最新stableの1.0.9が登録されていたので素直にそれをインストールすることにする。ちなみに各プラットフォーム向けにビルドされたバイナリが用意されているので、他の環境でもインストールは難しくないと思われる。

$ sudo yum install -y darcs

テストで適当なアプリケーション(ここではlambdabotというHaskellで実装されたIRCボット)をDarcsを使って取得する。

% darcs get http://code.haskell.org/lambdabot
Copying patch 1610 of 1610... done.
Applying patch 1610 of 1610... done.
Finished getting.
% ls lambdabot
AUTHORS     COPYING        IRCBase.hs    Lib         Modules.hs       Plugin.hs  Shared.hs  build         ghci                     online.rc
Boot.hs     Config.hs      LBState.hs    Main.hs     Modules.hs-boot  README     State      config.h.in   lambdabot.cabal          online2.rc
COMMANDS    DMain.hs       LMain.hs      Makefile    NickEq.hs        STYLE      TODO       configure     lambdabot.cabal.ghc-6.4  scripts
COMMENTARY  DynModules.hs  Lambdabot.hs  Message.hs  Plugin           Setup.hs   _darcs     configure.ac  lambdabot.cabal.plugins  testsuite

"Copying path xxx of xxxx..." みたいに表示されてなかなか時間がかかる。単に最新バージョンのソースを取得するだけじゃなくて、過去にコミットされたパッチをすべて集積してリポジトリを丸ごとコピーしているからだろうか?それによるありがたみは追々学ぶことにして、とりあえず動作したので良しとする。

しかし、パッケージシステムは大体どの言語も自前で持ってるもんだけど、バージョン管理まで独自の(あんまHaskell界隈以外では使われてない)ソフトウェアを使うなんて、どこまでなやつなんだHaskell