はじめてのhaskell Text.Parsec.Stringがない

WEB+DB PRESS vol.67に入門関数プログラミングという記事があったので買って読んでみました。

まずはサンプルコードを試すのにhaskell環境の準備ですが、centosについては特に記述がなかったので、yum search haskellしてでてきた ghcというパッケージをインストールしました。
順調に動かすことができたのですが、csv.hsを読み込んだところで、こんなエラーがでました。

[code language=”bash”]
GHCi, version 6.10.4: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim … linking … done.
Loading package integer … linking … done.
Loading package base … linking … done.

csv.hs:3:7:
Could not find module `Text.Parsec.String’:
Use -v to see a list of the files searched for.
Failed, modules loaded: none.
Prelude>

[/code]

Text.Parsec.Stringがないって言ってる感じです。

きっと、このバージョンにはText.Parsec.Stringというライブラリがないのでしょう。よーし。きっと最新版を入れれば解決だ。

最新版のghcを入れてみる・・・

そもそもghcって何かをよくわかってないけど、yumでインストールしたのがghcなので探して入れてみよう。

GHC: Download version 7.4.1

しかし、ダウンロードして./configureしてみるも、centos5.8だとlibcのバージョンが古いからだめだと言われます。

ちょっとめんどうそうなので、これは放置します。

つぎに、どうやらcabalというパッケージ管理ツールがあって、それでパッケージをインストールできるらしいことを見つけました。そのcabalというのはhaskell-platformの中にあるらしい。じゃあ、それをインストールしよう。

haskell-platform

新しめのバージョンでは、おまえのghcのバージョンは古いぞ、って言われるので、古めのバージョンをダウンロードします。

[code language=”bash”]
sudo freeglut-devel libedit-devel
wget http://hackage.haskell.org/platform/2009.2.0.2/haskell-platform-2009.2.0.2.tar.gz
tar zxf haskell-platform-2009.2.0.2.tar.gz
cd haskell-platform-2009.2.0.2
[/code]

ここで、./configure -> make -> make install とします。
しかし、どうも失敗します。

#. ビルドが始まる。
#. 既にインストールされているライブラリは時間の無駄なのでビルド処理をスキップ
#. スキップしないライブラリのビルドが走るが、スキップしたビルドの生成物を参照している!?
#. そのためファイルが見つからずエラー
#. make installでもスキップしたライブラリは、インストール対象がない、とエラー。そりゃあスキップしたからね。

というような感じで意味がわからないので、スキップする処理はコメントアウトして全部ビルドさせます。

scripts/build.sh

113 cd packages
114 for pkg in `cat platform.packages`; do
115   #if is_pkg_installed "${pkg}"; then
116   #  echo "Platform package ${pkg} is already installed. Skipping..."
117   #else
118     echo "Building ${PKG}"
119     build_pkg "${pkg}"
120   #fi
121 done
./configure
make
sudo make install

あと、makeを途中で止めたりエラーで止まった場合、途中までの結果はmake cleanだけでは消えないし、続けてmakeをしてもうまくいきません。
どれを消して良いかわからないので、一旦全部削除して圧縮ファイルの展開からやり直しました。

あと、こんなエラーも出てました。いつ出てたかは忘れました・・・。たしか、ビルドのスキップでのエラーのときだったかなぁ。

Setup: The program happy is required but it could not be found

cabal

haskell-platformのインストールが終わると、cabalというパッケージ管理ツールを使うことができます。
ライブラリのリストをアップデートして、parsecをインストールします。アップグレードかも。

sudo cabal update
sudo cabal install parsec

cabal自体をアップグレード・・・は失敗しました。

これで、Text.Parsec.STringが使えた

というわけで、これでWEB+DBのサンプルコードが動きました。
ubuntuあたりでapt-getすればこんなことしなくても動きそうですけどね・・・。


One thought to “はじめてのhaskell Text.Parsec.Stringがない”

  1. ディストリのパッケージにあるghcは古過ぎるので使わないほうがいいですよ。
    ghc7.4は一般向けじゃないのでhaskell platformからgch7.0.4(GHC 7.0.4 generic binaryというリンクから)のバイナリをインストールして、それからhaskell platformをインストールすると全体的にエラーが出にくく幸せになれます。
    ubuntuでも同様でパッケージからインストールするのではなく、haskell platformからインストールするのがベストです。

コメントは受け付けていません。